繁体   English   中英

matplotlib:如何在不改变外观的情况下从 plot 消除浪费的空间

[英]matplotlib: How to eliminate wasted space from plot without changing aspect

我想在 matplotlib 中显示具有相同纵横比的 plot。 然后我想截断 plot 的 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()

和结果图像:

在此处输入图像描述

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

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

您要求的是某种基于可见数据的自动缩放。 这在 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()

在此处输入图像描述

一种解决方法是先根据y上的条件屏蔽xy ,然后再屏蔽 plot

import numpy as np

x = np.array([-2,-1,0,1,2])
y = np.array([4,1,0,1,4])

cond = np.logical_and(y>=0, y<=1)

fig, ax = plt.subplots(1, 1)

ax.plot(x[np.where(cond)], y[np.where(cond)])
ax.set_aspect('equal', adjustable='box')

fig.show()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM