每个子图中的 matplotlib 颜色条

我想添加一个单独的颜色栏到每个子情节在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 = ...”,但是颜色条都在右下角的图上,而不是每个独立的图!

202998 次浏览

请看看这个 Matplotlib 示例页。这里展示了如何得到以下每个子情节有四个单独的颜色条的情节:enter image description here

希望这个能帮上忙。
您可以进一步查看 给你,在那里可以找到很多使用 matplotlib可以做的事情。

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

使用实用程序 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');

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

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

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)