Python Matplotlib和子图大小的问题

3

我试图用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-based”子图替换最后一个子图,则问题就消失了。这是为什么?我怎样才能解决它?

你的意思是实际绘图区域更小吗?这可能是由于y轴值引起的。在这种情况下,你可以使用subplots_adjust - Dman2
这个回答对你有帮助吗?https://dev59.com/QW445IYBdhLWcg3wAFq0 - Roman Susi
1个回答

2

在5个imshow()调用中,纵横比被设置为"equal"(通过调用ax1.get_aspect()检查),而对于ax5,其被设置为auto,这就是你观察到的非正方形形状的原因。我猜想imshow()默认为equal,而plot则不是。

要解决这个问题,需要手动设置所有轴的纵横比,例如在创建图时使用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(..)

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