python - python matplotlib 和子图大小的问题

标签 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 的”子图替换最后一个子图,问题就会消失。为什么会这样?我该如何解决?

最佳答案

宽高比设置为"equal" for the 5 imshow() calls (check by calling ax1.get_aspect() ) while for ax5 it is set to汽车 which gives you the non-square shape you observe. I'm guessing imshow()` 默认等于,而 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)) ),因此要绘制在 i 中, j情节只是打电话

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

关于python - python matplotlib 和子图大小的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874436/

相关文章:

Python:显示光标中元组的第一个元素

python - 除非包装在函数中,否则为什么打印 for 循环(整数)输出会产生语法错误?

python - 绘制推文的无缝分布

r - R 生成的 PDF 具有不一致的 MD5 校验和

Python Bokeh——使用DataFrame Columns将HoverToolTip合并到条形图中

python - 如何更改 Statsmodel 分解图中折线图的颜色

python - 消除 fft 图表中的噪音

python - 有条件地删除重复项 pandas python

python - Matplotlib 强制虚线接触轴

python - 运行 matplotlib 与 nbagg 交互的 linux VM 上的 ipython 笔记本