matplotlib: Как убрать потраченное впустую пространство из сюжета, не меняя аспект - PullRequest
1 голос
/ 26 сентября 2019

Я хочу отобразить сюжет с равным аспектом в 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()

и получившееся изображение:

enter image description here

Мой вопрос: Как удалить пробел с левой и правой сторонграфик с сохранением соотношения сторон, поэтому график будет больше и будет лучше соответствовать данным? К сожалению, я могу не знать точные пределы x, которые я хочу, или формулы для их получения с учетом пределов y.

edit: Мне бы хотелось, чтобы полученное изображение выглядело примерно так: enter image description here

Ответы [ 2 ]

4 голосов
/ 26 сентября 2019

То, что вы просите, - это какое-то автоматическое масштабирование, основанное на видимых данных.Это не реализовано в 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()

enter image description here

2 голосов
/ 26 сентября 2019

Один из обходных путей - замаскировать x и y сначала на основе условия на y, а затем на графике

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()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...