我正在从 matplotlib.animation 绘制动态图形(使用 FuncAnimation),但我在更新颜色条的边界方面遇到了很多困难。当然,我想更新它而不删除当前颜色条并绘制新颜色条,我只想更新当前颜色条的边界。
例如,如果第一个边界是从 0 到 1,我希望能够将它们从 0 更改为 100 或任何值。
令我惊讶的是,这方面的任何信息都很难找到,我已经搜索了一整天,我对这个消耗这么多时间的小事感到有点愚蠢和厌倦:')。
请问有什么想法吗?
这是带有颜色条的基本图形...我想更新颜色条的边界(假设显示的图形已更新并且颜色条边界不再适合该图形)。
import numpy as np
import matplotlib.pyplot as plt
# Initial figure
data_array = np.random.rand(50,50)
fig, ax = plt.subplots()
IMAGE = ax.imshow(data_array, animated = True)
# Color bar new axis
cbaxes = fig.add_axes()
colorbar_bounds = np.linspace(np.min(data_array), np.max(data_array), 50)
colorbar_ticks = np.linspace(np.min(data_array), np.max(data_array) , 10)
# Colorbar
clb = fig.colorbar(IMAGE, cbaxes, orientation='vertical', boundaries=colorbar_bounds, ticks = colorbar_ticks)
plt.show()
最佳答案
因为我认为使用基本的 matplotlib 颜色条选项无法做到这一点(至少我找不到任何选项),所以我创建了自己的颜色条。
这是解决方案。
注意: 仅当您需要动态颜色条(例如在动画图形 Canvas 中自动更新)时,animated=True 属性才是必需的。
import numpy as np
import matplotlib.pyplot as plt
# INIT figure and axes
data_array = np.random.rand(50,50)
fig, [ax, cbax1, cbax2] = plt.subplots(1,3, sharex = False)
IMAGE = ax.imshow(data_array, animated = True)
# Colorbar boundaries and ticks
colorbar_bounds = np.linspace(np.min(data_array), np.max(data_array), 50)
colorbar_ticks = np.linspace(np.min(data_array), np.max(data_array) , 10)
# Classic Colorbar
classic_clb = fig.colorbar(IMAGE, cbax1, orientation='vertical', boundaries=colorbar_bounds, ticks = colorbar_ticks)
cbax1.set_title("Classic colorbar")
# Personalized (Dynamic or not as you want) Colorbar
myclb = colorbar_bounds[:, np.newaxis]
myclb = cbax2.imshow(myclb, animated = True, cmap = "nipy_spectral")
cbax2.set_title("My colorbar")
plt.show()
然后我可以用以下方式更新我的颜色条:(如果您不需要更改颜色条,请忘记这一点)
myclb.set_array(mycb)
关于python - 更新颜色条边界而不删除前一个颜色条边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57612868/