我想更新一個函數內的contourf
圖,它可以正常工作。 但是,數據的範圍發生變化,因此我也必須更新顏色條。那是我未能這樣做的地方。matplotlib中colorbar的更新範圍
請參閱以下最低工作示例:
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()
我獲得下面的圖片:
這正是我想要的。 在update()
函數中,我基本上將數據範圍從[0,1)
更改爲[0,2)
,創建新數據並更新繪圖。我還嘗試將色條中的採樣加倍,使間隔爲0.1,而不是0.2。這就是我得到:
的數據是正確的繪製,數據的顏色映射是正確的,蜱,並在彩條的顏色是正確的,但是彩條的範圍仍然是從0到1.如何更改顏色條以顯示最大2的全部範圍?
我正在修改的實際腳本非常複雜,並且在極座標中有圖。我寧願不要碰這個。 可以'imshow'處理極座標嗎? – Sebastian
不,不是直接的,人們需要手動轉換數據以適應矩形網格。也許刪除和重繪彩條也是一個選擇? (我剛纔回答了[有關此問題](http://stackoverflow.com/a/40774184/4124317)) – ImportanceOfBeingErnest
這很有效。謝謝。 但是,你知道爲什麼使用imshow時colorbar的更新工作,但不知道爲contourf嗎? – Sebastian