以编程方式更改Matplotlib填充数据。

3

我正在使用Matplotlib创建动画,并使用Fill对象。我想能够从一个函数中更改填充数据。对于其他类型的绘图,通常有set_data()函数或set_offsets()函数。但是Fill似乎没有这样的函数。我希望能够像下面的代码一样实现,但这不起作用。有什么想法吗?

import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(xlim=(-1, 1), ylim=(-1, 1),)
triangle, = ax.fill([0,1,1],[0,0,1])
# I want to change the datapoints later in my code, like this:
triangle.set_data([0,2,2],[0,0,2])

triangle是什么类型的对象?你查阅了该类型的文档吗?我能理解你为什么希望那段代码能够工作,但你认为它应该工作的原因是什么? - tacaswell
“triangle” 是一个“fill”对象,它是一个“Polygon”,我认为它应该有一种方法来改变它的数据。 - gallamine
你看过 http://matplotlib.org/api/artist_api.html#matplotlib.patches.Polygon 吗? - tacaswell
是的。不确定是否有改变数据的方法。因此我提出了这个问题。如果有其他建议可以将数据转换为封闭、填充的对象,我也很乐意听取。 - gallamine
set_xy是什么?请参考http://matplotlib.org/api/artist_api.html#matplotlib.patches.Polygon.set_xy - tacaswell
1个回答

2
这并没有特别好的文档说明,但是Polygon对象有一对方法get_xyset_xy。方法get_xy()返回一个形状为(N + 1, 2)的ndarray。额外的点是第一个点的重复(以便多边形闭合)。将所需数据放入期望的格式中(这是在文档中指定构造Polygon对象的方式):
triangle.set_xy(np.array([[0, 2, 2, 0],[0, 0, 2, 0]]).T)
ax = plt.gca()
ax.set_xlim([0, 3])
ax.set_ylim([0, 3])
plt.draw()

这甚至可以让你改变贴片中的顶点数量。
添加了问题以澄清文档 https://github.com/matplotlib/matplotlib/issues/3035

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接