繁体   English   中英

如何更新matplotlib中的imshow范围?

[英]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_fooset_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM