Я хотел бы построить набор точек с помощью pyplot в matplotlib, но чтобы ни одна из точек не находилась на краю моих осей. Автомасштабирование (или что-то еще) устанавливает xlim
и ylim
так, что часто первая и последняя точки лежат на x = xmin
или xmax
что затрудняет чтение в некоторых ситуациях.
Это чаще проблематично с графиками loglog ()
или semilog ()
, потому что автоматическое масштабирование хотело бы xmin
и xmax
, чтобы быть точными степенями десяти, но если мои данные содержат только три точки, например, в xdata = [10 ** 2,10 ** 3,10 ** 4]
тогда первая и последняя точки будут лежать на границе участка.
Это мое решение - добавить 10% буфер по обе стороны от графика. Но есть ли способ сделать это более элегантно или автоматически?
from numpy import array, log10
from matplotlib.pyplot import *
xdata = array([10**2,10**3,10**4])
ydata = xdata**2
figure()
loglog(xdata,ydata,'.')
xmin,xmax = xlim()
xbuff = 0.1*log10(xmax/xmin)
xlim(xmin*10**(-xbuff),xmax*10**(xbuff))
Я надеюсь на одно- или двухстрочное решение, которое я смогу легко использовать всякий раз, когда я создаю такой график.
To поясните, что я делаю в своем обходном пути, я должен добавить пример в линейном пространстве (вместо пространства журнала):
plot(xdata,ydata)
xmin,xmax = xlim()
xbuff = 0.1*(xmax-xmin)
xlim(xmin-xbuff,xmax+xbuff))
, который идентичен предыдущему примеру, но для линейной оси.
] Связанная проблема заключается в том, что иногда ограничения слишком велики. Скажем, мои данные выглядят примерно так ydata = xdata ** 0,25
, так что дисперсия в диапазоне намного меньше десятилетия, но заканчивается точно на 10 ** 1
. Потом, автомасштабирование илим
составляет от 10 ** 0
до 10 ** 1
, хотя данные находятся только в верхней части графика. Используя описанный выше обходной путь, я могу увеличить ymax
так, чтобы третья точка полностью находилась в пределах, но я не знаю, как увеличить ymin
, чтобы было меньше пробелов. в нижней части моего участка. то есть, дело в том, что я не всегда хочу раздвигать свои пределы, а просто хотел бы иметь некоторый постоянный (или пропорциональный) буфер вокруг всех моих точек.