Matplotlib/pyplot: Как обеспечить использование диапазона оси?
Я хотел бы нарисовать стандартный двумерный линейный график с пилотом, но заставлять значения осей находиться между 0 и 600 на х, 10k и 20k на y. Позвольте мне привести пример...
import pylab as p
p.title(save_file)
p.axis([0.0,600.0,1000000.0,2000000.0])
#define keys and items elsewhere..
p.plot(keys,items)
p.savefig(save_file, dpi=100)
Однако оси по-прежнему регулируют размер данных. Я интерпретирую влияние p.axis на то, что может быть максимальным и минимальным, а не обеспечивать их максимальным или минимальным. То же самое происходит, когда я пытаюсь использовать p.xlim() и т.д.
Любые мысли?
Спасибо.
Ответы
Ответ 1
Вызов p.plot
после установки пределов - это то, почему он перемасштабирует. Вы правы в том, что отключение автомасштабирования приведет к правильному ответу, но вызовет xlim()
или ylim()
после вашу команду plot
.
Я использую это довольно много, чтобы инвертировать ось x, я работаю в астрономии, и мы используем систему величин, которая находится назад (т.е. яркие звезды имеют меньшую величину), поэтому я обычно меняю границы с помощью
lims = xlim()
xlim([lims[1], lims[0]])
Ответ 2
Чтобы ответить на мой собственный вопрос, трюк состоит в том, чтобы отключить автоматическое масштабирование...
p.axis([0.0,600.0, 10000.0,20000.0])
ax = p.gca()
ax.set_autoscale_on(False)
Ответ 3
Я попробовал все эти ответы, и затем я обобщил конвейер, как рисовать изображение с фиксированной осью. Он применялся как к функции show
, так и к функции savefig
.
Это запрос ax
, который subplot(1,1,1)
.
-
Во время сюжета:
ax.plot('You plot argument') # Put inside your argument, like ax.plot(x,y,label='test')
ax.axis('The list of range') # Put in side your range [xmin,xmax,ymin,ymax], like ax.axis([-5,5,-5,200])
-
После графика:
Я выясню, что put axis
в начале кода не будет работать, хотя я установил autoscale_on
в False
.
Я использовал этот код для создания серии анимации. И ниже приведен пример расчесывания нескольких неподвижных изображений осей в анимацию.
![img]()
Ответ 4
Попробуйте поместить вызов axis
после всех команд построения.