首页 > 解决方案 > matplotlib:如何在不改变方面的情况下消除绘图中的浪费空间

问题描述

我想在 matplotlib 中显示一个等宽的图。然后我想截断绘图的 y 部分,以便更仔细地查看数据。但是,我希望自动更改 x 轴限制以适应数据的剩余可见部分。

到目前为止,这是我的代码(出于说明目的使用假数据):

import matplotlib.pyplot as plt


fig, ax = plt.subplots(1, 1)
ax.plot([-2,-1,0,1,2], [4,1,0,1,4])
ax.set_aspect('equal', adjustable='box')
ax.set_ylim(0,1)
fig.show()

和结果图像:

在此处输入图像描述

我的问题是,如何在保留纵横比的同时从绘图的左侧和右侧删除空白,这样绘图会更大并且更适合数据? 不幸的是,我可能不知道我想要的确切 x 限制或在给定 y 限制的情况下推导出它们的公式。

编辑: 我希望生成的图像看起来像这样: 在此处输入图像描述

标签: pythonmatplotlib

解决方案


您要求的是某种基于可见数据的自动缩放。这在 matplotlib 中没有实现。不过,您可以手动进行,即基于所需的 y 限制,检查哪些点是可见的,然后相应地设置 x 限制。

import matplotlib.pyplot as plt


fig, ax = plt.subplots(1, 1)
line, = ax.plot([-2,-1,0,1,2], [4,1,0,1,4])

ax.set_aspect('equal', adjustable='box')

ymin = 0
ymax = 1
ax.set_ylim(ymin, ymax)
x,y = line.get_data()
cond = (y >= ymin) & (y <= ymax)
ax.set_xlim(x[cond].min(), x[cond].max())

plt.show()

在此处输入图像描述


推荐阅读