更新matplotlib中的colorbar范围

时间:2016-12-05 22:36:23

标签: 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()

不调用update()我得到以下图片:

enter image description here

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

enter image description here

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

2 个答案:

答案 0 :(得分:1)

您可以使用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()

答案 1 :(得分:0)

<强>更新 我根据您的评论和答案更新了我的答案。 Link

这是你想要做的事情吗?

undefined