我有一个外部服务,有时会触发函数Environment.getExternalStorageState()
—检查下面的代码—以更新用{{1}绘制的 Polygon 补丁}。
callback(points)
但是,这不起作用...该图未更新。 matplotlib
和fig, ax = plt.subplots()
polygon = Polygon([[0, 0]])
patches = []
patches.append(polygon)
collection = PatchCollection(patches, animated=True, alpha=0.4)
ax.add_collection(collection)
ax.autoscale_view(True)
plt.show()
def callback(points):
polygon.set_xy(points)
fig.canvas.draw()
fig.canvas.flush_events()
不是正确的电话吗?
我在网上看到了其他使用canvas.draw
的示例,但由于无法模拟输入内容,因此无法使用。相反,它们来自调用canvas.flush_events
的外部服务。
我该如何进行这项工作?谢谢!
答案 0 :(得分:0)
好的,我稍加修改了this example(它使用了UpdatablePatchCollection
),并且现在可以使用了。
这是一个可行的最小示例:
%matplotlib notebook # Use this on Jupyter Notebooks
import matplotlib.collections as mcollections
import matplotlib.pyplot as plt
import matplotlib as mpl
import time
class UpdatablePatchCollection(mcollections.PatchCollection):
def __init__(self, patches, *args, **kwargs):
self.patches = patches
mcollections.PatchCollection.__init__(self, patches, *args, **kwargs)
def get_paths(self):
self.set_paths(self.patches)
return self._paths
plt.ion()
rect = mpl.patches.Rectangle((0,0),1,1)
collection = UpdatablePatchCollection([rect])
fig, ax = plt.subplots()
ax.set_xlim(0,5)
ax.set_ylim(0,3)
ax.add_artist(collection)
def update_plot(i):
rect.set_xy((i,1))
fig.canvas.draw()
fig.canvas.flush_events()
for i in range(5):
time.sleep(0.5)
update_plot(i)
此部分对于每帧“ 渲染”很重要。
fig.canvas.draw()
fig.canvas.flush_events()
并注意重要的plt.ion()
通话。如果没有它,该图将无法交互地对补丁集进行更改。