Python中matplotlib中不均匀居中的子图?

时间:2010-06-14 03:42:26

标签: python numpy matplotlib scipy

我正在matplotlib中绘制一对简单的子图,这些子图由于某种原因不均匀地居中。我将它们绘制如下:

plt.figure()
# first subplot
s1 = plt.subplot(2, 1, 1)
plt.bar([1, 2, 3], [4, 5, 6])
# second subplot
s2 = plt.subplot(2, 1, 2)
plt.pcolor(rand(5,5))

# add colorbar
plt.colorbar()

# square axes
axes_square(s1)
axes_square(s2)

其中axes_square只是:

def axes_square(plot_handle):
  plot_handle.axes.set_aspect(1/plot_handle.axes.get_data_ratio()) 

附上我得到的情节。顶部和底部的图不均匀居中。我希望他们的yaxis能够对齐并且他们的盒子要对齐。

如果我删除plt.colorbar()调用,则图形会居中。当pcolor的颜色条仍然显示时,我怎样才能使图形居中?我希望轴居中并使颜色条位于该对齐之外,或者在pcolor矩阵的左侧或右侧。

image of plots link

Image of uncentered subplots in matplotlib http://i45.tinypic.com/2i1kvtu.png

感谢。

2 个答案:

答案 0 :(得分:2)

嗯,这可能不是你想要的,但它会起作用:

from numpy.random import rand
import matplotlib.pyplot as plt

plt.figure()
# first subplot
s1 = plt.subplot(2, 2, 2)
plt.bar([1, 2, 3], [4, 5, 6])
# second subplot
s2 = plt.subplot(2, 2, 4)
plt.pcolor(rand(5,5))

# square axes
axes_square(s1)
axes_square(s2)

s_fake = plt.subplot(2, 2, 3)
s_fake.set_axis_off()
# add colorbar
plt.colorbar()

它只是在左边制作一对假单元格,并且不会在其中显示任何内容。不漂亮,但它的工作原理。 ;)

另外,我猜你的代码隐含了这两个导入......

答案 1 :(得分:0)

为colorbar指定一个cax参数,以指定您喜欢颜色条的位置:

plt.colorbar(cax=plt.gcf().add_axes((0.75,0.1,0.05,0.3)))