如何在不同的子图中绘制pcolor colorbar - matplotlib

11

我想将我的图分为不同的子图。我的目标是在一个不同的子图中放置一个颜色条。

现在我正在使用:

# first graph
axes = plt.subplot2grid((4, 2), (0, 0), rowspan=3)
pc = plt.pcolor(df1, cmap='jet')

# second graph
axes = plt.subplot2grid((4, 2), (3, 0))
plt.pcolor(df2, cmap='Greys')

# colorbar
plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc) 

但是结果如下(请注意彩条左侧的不必要的空图): Wrong graph

我该怎么做才能只打印彩条而不是左边的图形?

谢谢

2个回答

19

colorbar()接受关键字参数,允许您指定对象,该彩条将绘制在其上。

在您的情况下,您需要将彩条调用更改为以下内容:

# colorbar
axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc, cax=axes)

这将占据 subplot2grid 给定的整个空间;你可以通过让主轴占用比色条轴更多的列或显式设置gridspec来使其更加合理。例如,以下设置可能使您的图更易调整:

from matplotlib import gridspec
gs = gridspec.GridSpec(2, 2, height_ratios=(3, 1), width_ratios=(9, 1))

# first graph
axes = plt.subplot(gs[0,0])
pc = plt.pcolor(df1, cmap='jet')

# second graph
axes = plt.subplot(gs[1,0])
plt.pcolor(df2, cmap='Greys')

# colorbar
axes = plt.subplot(gs[0,1])
plt.colorbar(pc, cax=axes)

然后您只需更改height_ratioswidth_ratios以符合您的喜好。


它可以工作,但颜色栏在水平方向上被放大了。如何保持相同的默认比例?我尝试传递“aspect”关键字,但它没有被接受,所以我退而求其次,通过增加图形的列数来明确地实现它。 - gc5
我在答案中添加了一个部分,介绍了另一种让色条轴占用更少空间的方法。 - tbekolay
没问题 :) 祝你绘图愉快! - tbekolay
1
只有一件事:第二个子图调用缺少gs变量。 - gc5
1
你能否将 plt 调用更改为面向对象的调用,因为你已经创建并跟踪了轴对象?我知道我可以自己编辑它,但那似乎很粗鲁。 - tacaswell

0

我认为你应该使用ax而不是cax

# colorbar
axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc, ax=axes)

3
不,cax设置色条绘制的轴,ax仅用于确定如果未传递cax应从哪个轴占用空间。 - tacaswell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接