每个子图中的matplotlib颜色条

问题描述 投票:22回答:4

我想在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 = ...”,但是然后颜色条全部出现在右下方的情节而不是每个单独的情节!

python matplotlib colorbar
4个回答
13
投票

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

我希望这有帮助。 您可以进一步了解here,在那里您可以找到很多用matplotlib可以做的事情。


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');

12
投票

plt.colorbar(z1_plot,cax=ax1),使用ax=而不是cax=,即plt.colorbar(z1_plot,ax=ax1)


0
投票

指定axmatplotlib.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

© www.soinside.com 2019 - 2024. All rights reserved.