【问题标题】:Python - add colorbars in multiple plots for each plotPython - 在每个绘图的多个绘图中添加颜色条
【发布时间】:2015-08-18 19:28:58
【问题描述】:

我在一个图上有多个图。我想为每个结果添加颜色条。这些颜色条必须与我的结果具有相同的高度,我想将颜色条上显示的数字限制为 3 个值(以便获得可读的数字)。

我的代码是:

fig, axes = plt.subplots(nrows=1, ncols=3)

plt.tight_layout(pad=0.5, w_pad=2.5, h_pad=2.0)
ax1 = plt.subplot(131) # creates first axis
ax1.set_xticks([0,2000,500,1000,1500])
ax1.set_yticks([0,2000,500,1000,1500])
ax1.imshow(U,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
ax1.set_title("$ \mathrm{Ux_{mes} \/ (pix)}$")
ax2 = plt.subplot(132) # creates second axis
ax2.set_xticks([0,2000,500,1000,1500])
ax2.set_yticks([0,2000,500,1000,1500])
ax2.imshow(UU,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
ax2.set_title("$\mathrm{Ux_{cal} \/ (pix)}$")
ax3 = plt.subplot(133) # creates first axis
ax3.set_xticks([0,2000,500,1000,1500])
ax3.set_yticks([0,2000,500,1000,1500])
ax3.imshow(resU,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
ax3.set_title("$\mathrm{\mid Ux - Ux \mid \/ (pix)}$ ")
plt.show()

我尝试添加:“fig.colorbar(U, axes=ax1,fraction=0.046, pad=0.04)” 但它不起作用...

【问题讨论】:

  • 您可以在colorbar 中使用ticks=.. 限制数量

标签: python matplotlib colorbox subplot


【解决方案1】:

您可以使用plt.colorbar 添加颜色条。它需要图像作为参数。为了出现在正确的轴上,它还需要它所连接的轴

plt.tight_layout(pad=0.5, w_pad=2.5, h_pad=2.0)
ax1 = plt.subplot(131) # creates first axis
ax1.set_xticks([0,2000,500,1000,1500])
ax1.set_yticks([0,2000,500,1000,1500])
i1 = ax1.imshow(U,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
plt.colorbar(i1,ax=ax1,ticks=np.linspace(np.amin(U),np.amax(U),3))

ax1.set_title("$ \mathrm{Ux_{mes} \/ (pix)}$")
ax2 = plt.subplot(132) # creates second axis
ax2.set_xticks([0,2000,500,1000,1500])
ax2.set_yticks([0,2000,500,1000,1500])
i2=ax2.imshow(UU,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
ax2.set_title("$\mathrm{Ux_{cal} \/ (pix)}$")
plt.colorbar(i2,ax=ax2,ticks=np.linspace(np.amin(UU),np.amax(UU),3))

ax3 = plt.subplot(133) # creates first axis
ax3.set_xticks([0,2000,500,1000,1500])
ax3.set_yticks([0,2000,500,1000,1500])
i3 = ax3.imshow(resU,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
ax3.set_title("$\mathrm{\mid Ux - Ux \mid \/ (pix)}$ ")
plt.colorbar(i3,ax=ax3,ticks=np.linspace(np.amin(resU),np.amax(resU),3))

plt.show()

更新

如果颜色条的高度太大,你可以解决这个问题

plt.colorbar(...,fraction=0.046, pad=0.04) 

强调here

如果图重叠尝试

plt.gcf().tight_layout()

【讨论】:

    【解决方案2】:

    按照@plonser的答案,

    tick = np.linspace(min(your_variable),max(your_variable),3)
    
    plt.tight_layout(pad=0.5, w_pad=2.5, h_pad=2.0)
    ax1 = plt.subplot(131) # creates first axis
    ax1.set_xticks([0,2000,500,1000,1500])
    ax1.set_yticks([0,2000,500,1000,1500])
    i1 = ax1.imshow(U,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
    plt.colorbar(i1,ax=ax1,ticks=tick)
    
    ax1.set_title("$ \mathrm{Ux_{mes} \/ (pix)}$")
    ax2 = plt.subplot(132) # creates second axis
    ax2.set_xticks([0,2000,500,1000,1500])
    ax2.set_yticks([0,2000,500,1000,1500])
    i2=ax2.imshow(UU,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
    ax2.set_title("$\mathrm{Ux_{cal} \/ (pix)}$")
    plt.colorbar(i2,ax=ax2,ticks=tick)
    
    ax3 = plt.subplot(133) # creates first axis
    ax3.set_xticks([0,2000,500,1000,1500])
    ax3.set_yticks([0,2000,500,1000,1500])
    i3 = ax3.imshow(resU,cmap='hot',extent=(X.min(),2000,Y.min(),2000))
    ax3.set_title("$\mathrm{\mid Ux - Ux \mid \/ (pix)}$ ")
    plt.colorbar(i3,ax=ax3,ticks=tick)
    
    plt.show()
    

    当您指定时,您使用的是ax=ax1 而不是axes=ax1。此外,要限制colorbar 中的项目数量,您可以使用ticks 选项来实现。

    【讨论】:

    • 谢谢,但我有一个小问题,情节重叠了一点......我该如何纠正?
    • 我相信您应该使用重叠图编辑问题,以便我能够看到它。
    猜你喜欢
    • 2016-07-20
    • 1970-01-01
    • 2015-11-07
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2016-04-11
    • 2017-07-12
    相关资源
    最近更新 更多