[英]How do I update the extent of imshow in matplotlib?
在matplotlib中更新“ imshow”图时,最好使用im.set_data,而不是在循环中重复使用ax.imshow。 但是,如果数据范围在变化,该怎么办? 是否可以在每次循环迭代时更新数据范围?
这是一个例子:
import numpy as np
import matplotlib.pyplot as plt
import time
ax = plt.subplot(111)
plt.ion()
plt.show()
count = 0
for size in np.linspace(1,3,10):
x = np.linspace(-size,size,100)
y = np.linspace(-size,size,100)
X,Y = np.meshgrid(x,y)
R = (X**2+Y**2)**0.5
Z = np.sin(R)/R
ext =(-size,size,-size,size)
if count == 0:
im = plt.imshow(Z,extent=ext)
else:
im.set_data(Z)
# Update the extent of the data
plt.draw()
plt.pause(0.5)
ax.set_xlim(-size,size)
ax.set_ylim(-size,size)
count += 1
plt.ioff()
plt.show()
如果我可以适当地更新范围,则彩色区域应占据整个轴。
在您的示例中, im.set_extent(ext)
。
不过,更一般而言,几乎在初始化期间您可以传递给matplotlib artist的所有kwarg都将具有get_foo
和set_foo
方法。 (这实际上是初始化的工作方式,以及artist.set(...)
和plt.setp
工作方式。)
如果要查找如何更改给定属性, set_<name>
查找的第一位是set_<name>
方法。
也有例外。 例如, scatter
返回一个Collection
,因此您需要调用set_offsets
而不是set_xy
来更改x,y数据。 总体而言,这是一致的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.