每个子图中的matplotlib颜色条

时间:2014-05-26 19:28:37

标签: python matplotlib colorbar

我想在2x2图中为每个子图添加一个单独的颜色条。

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
plt.colorbar(z1_plot,cax=ax1)
z2_plot = ax2.scatter(x,y,c = z2,vmin=0.0,vmax=40)
plt.colorbar(z1_plot,cax=ax2)
z3_plot = ax3.scatter(x,y,c = z3,vmin=0.0,vmax=894)
plt.colorbar(z1_plot,cax=ax3)
z4_plot = ax4.scatter(x,y,c = z4,vmin=0.0,vmax=234324)
plt.colorbar(z1_plot,cax=ax4)
plt.show()

我认为你就是这样做的,但结果情节真的搞砸了;它只有一个全灰色背景,忽略了我有的set_xlim,set_ylim命令(为简单起见,这里没有显示)。 +它显示没有颜色条。这是正确的方法吗?

我也尝试摆脱" cax = ...",然后颜色栏全部放在右下方的情节而不是每个单独的情节!

5 个答案:

答案 0 :(得分:16)

使用实用程序make_axes_locatable可以轻松解决此问题。我提供了一个最小的例子,说明了它是如何工作的,应该很容易适应:

bar to each image

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

import numpy as np

m1 = np.random.rand(3, 3)
m2 = np.arange(0, 3*3, 1).reshape((3, 3))

fig = plt.figure(figsize=(16, 12))
ax1 = fig.add_subplot(121)
im1 = ax1.imshow(m1, interpolation='None')

divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im1, cax=cax, orientation='vertical')

ax2 = fig.add_subplot(122)
im2 = ax2.imshow(m2, interpolation='None')

divider = make_axes_locatable(ax2)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im2, cax=cax, orientation='vertical');

答案 1 :(得分:13)

请查看此matplotlib example page。在那里展示了如何使用每个子图的四个单独颜色条得到以下图:enter image description here

我希望这会有所帮助 您可以进一步查看here,在那里您可以找到许多使用matplotlib可以执行的操作。

答案 2 :(得分:11)

plt.colorbar(z1_plot,cax=ax1)中,使用ax=代替cax=,即plt.colorbar(z1_plot,ax=ax1)

答案 3 :(得分:0)

ax参数指定为matplotlib.pyplot.colorbar(),例如

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(2,2)
for i in range(2) :
    for j in range(2) :
         data = np.array([[i,j],[i+0.5,j+0.5]])
         im = ax[i,j].imshow(data)
         plt.colorbar(im,ax=ax[i,j])

plt.show()

enter image description here

答案 4 :(得分:0)

尝试使用下面的功能添加颜色栏:

def add_colorbar(mappable):
    from mpl_toolkits.axes_grid1 import make_axes_locatable
    import matplotlib.pyplot as plt
    last_axes = plt.gca()
    ax = mappable.axes
    fig = ax.figure
    divider = make_axes_locatable(ax)
    cax = divider.append_axes("right", size="5%", pad=0.05)
    cbar = fig.colorbar(mappable, cax=cax)
    plt.sca(last_axes)
    return cbar

然后您的代码需要修改为:

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
add_colorbar(z1_plot)