gpt4 book ai didi

python - 更新 matplotlib 中颜色条的范围

转载 作者:行者123 更新时间:2023-11-28 18:26:32 25 4
gpt4 key购买 nike

我想更新函数内的 contourf 图,效果很好。但是,数据范围发生变化,因此我还必须更新颜色条。这就是我未能做到的地方。

请参阅以下最低工作示例:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

# Random data
data = np.random.rand(10, 10)

# Plot data
levels = np.linspace(0., 1., 100)
plot = ax.contourf(data, levels=levels)
clist = plot.collections[:]

# Create colorbar
cbar = plt.colorbar(plot)
cbar_ticks = np.linspace(0., 1., num=6, endpoint=True)
cbar.set_ticks(cbar_ticks)

plt.show()

def update():
# Remove old plot
for c in clist:
ax.collections.remove(c)
clist.remove(c)

# Create new data and plot
new_data = 2.*np.random.rand(10, 10)
new_levels = np.linspace(0., 2., 200)
new_plot = ax.contourf(new_data, levels=new_levels )

# Modify colorbar
cbar.set_clim(0., 2.)
new_cbar_ticks = np.linspace(0., 2., num=21, endpoint=True)
cbar.set_ticks(new_cbar_ticks)

plt.draw()

update()

在不调用 update() 的情况下,我得到了下图:

enter image description here

这正是我想要的。在 update() 函数中,我基本上将数据范围从 [0,1) 更改为 [0,2),创建新的数据,并更新情节。我还尝试将颜色条刻度中的采样加倍,使刻度间隔为 0.1,而不是 0.2。这是我得到的:

enter image description here

数据绘制正确,数据的颜色图正确,颜色条中的刻度和颜色正确,但颜色条的范围仍然是从 0 到 1。如何更改颜色条以显示全范围高达 2?

最佳答案

您可以使用 imshow 而不是 contour 吗?在这种情况下,只需更新绘图和颜色条就很容易了。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

# Random data
data = np.random.rand(10, 10)

# Plot data
plot = ax.imshow(data)


# Create colorbar
cbar = plt.colorbar(plot)
cbar_ticks = np.linspace(0., 1., num=6, endpoint=True)
cbar.set_ticks(cbar_ticks)

plt.show(block=False)

def update():

new_data = 2.*np.random.rand(10, 10)

plot.set_data(new_data)
cbar.set_clim(vmin=0,vmax=2)
cbar_ticks = np.linspace(0., 2., num=11, endpoint=True)
cbar.set_ticks(cbar_ticks)
cbar.draw_all()
plt.draw()

plt.show()

update()

关于python - 更新 matplotlib 中颜色条的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com