我想在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 = ...",然后颜色栏全部放在右下方的情节而不是每个单独的情节!
答案 0 :(得分:16)
使用实用程序make_axes_locatable
可以轻松解决此问题。我提供了一个最小的例子,说明了它是如何工作的,应该很容易适应:
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。在那里展示了如何使用每个子图的四个单独颜色条得到以下图:
我希望这会有所帮助
您可以进一步查看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()
答案 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)