python matplotlib和子图大小的问题

时间:2013-09-18 14:06:54

标签: python matplotlib plot

我正在尝试在python中创建一个包含6个子图的图,但我遇到了问题。这是我的代码的简化版本:

import matplotlib.pyplot as plt
import numpy

g_width = 200
g_height = 200
data = numpy.zeros(g_width*g_height).reshape(g_height,g_width)

ax1 = plt.subplot(231)
im1 = ax1.imshow(data)
ax2 = plt.subplot(232)
im2 = ax2.imshow(data)
ax3 = plt.subplot(233)
im3 = ax3.imshow(data)
ax0 = plt.subplot(234)
im0 = ax0.imshow(data)
ax4 = plt.subplot(235)
im4 = ax4.imshow(data)
ax5 = plt.subplot(236)
ax5.plot([1,2], [1,2])
plt.show()

上图有5个“基于imshow的”子图和一个基于简单数据的子图。有人可以向我解释为什么最后一个子图的框与其他子图的大小不同?如果我用“基于imshow的”子图替换最后一个子图,问题就会消失。为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:2)

宽高比设置为"equal" for the 5 imshow()calls (check by calling ax1.get_aspect()) while for ax5 it is set to auto which gives you the non-square shape you observe. I'm guessing imshow()`默认为等于情节没有。

要手动修复此设置所有轴纵横比,例如在创建绘图ax5 = plt.subplot(236, aspect="equal")

在侧节点上,如果您创建这样的多个轴,您可能会觉得这很有用:

fig, ax = plt.subplots(ncols=3, nrows=2, subplot_kw={'aspect':'equal'})

然后ax是一个元组(在本例中为ax = ((ax1, ax2, ax3), (ax4, ax5, ax6))),因此要在ij图中进行绘图,只需调用

ax[i,j].plot(..)