Seb*_*ian 8 python matplotlib colorbar contourf
我想更新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()
Run Code Online (Sandbox Code Playgroud)
无需调用update()我就得到以下图像:
这正是我想要的。在函数中update(),我基本上将数据范围从 更改[0,1)为[0,2),创建新数据并更新绘图。我还尝试将颜色条刻度中的采样加倍,以使刻度间隔为 0.1,而不是 0.2。这就是我得到的:
数据绘制正确,数据的颜色图正确,颜色条中的刻度和颜色正确,但颜色条的范围仍然从 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17777 次 |
| 最近记录: |