Matplotlib/pyplot: как установить диапазон осей?
Я хотел бы нарисовать стандартную двухмерную линейную диаграмму с графиком, но заставить значения осей быть между 0 и 600 на x, и 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() и т. Д.
Какие-нибудь мысли?
Благодарю.
4 ответа
Призвание p.plot
после установки лимитов это то, почему это масштабирование. Вы правы в том, что отключение автоматического масштабирования даст правильный ответ, но вызов будет xlim()
или же ylim()
после вашего plot
команда.
Я использую это довольно часто, чтобы инвертировать ось X, я работаю в астрономии, и мы используем систему величин, которая является обратной (то есть более яркие звезды имеют меньшую величину), поэтому я обычно меняю границы с
lims = xlim()
xlim([lims[1], lims[0]])
Чтобы ответить на мой собственный вопрос, нужно отключить автоматическое масштабирование...
p.axis([0.0,600.0, 10000.0,20000.0])
ax = p.gca()
ax.set_autoscale_on(False)
Я попробовал все вышеперечисленные ответы, а затем подвел итог, как нарисовать изображение с фиксированными осями. Это относится как к show
функция и savefig
функция.
прежде чем строить сюжет:
fig = pylab.figure() ax = fig.gca() ax.set_autoscale_on(False)
Это запросить 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])
После сюжета:
Чтобы показать изображение:
fig.show()
Чтобы сохранить рисунок:
fig.savefig('the name of your figure')
Я выяснил, что поставить axis
в начале кода не будет работать, даже если я установил autoscale_on
в False
,
Я использовал этот код для создания серии анимации. А ниже приведен пример объединения изображений с несколькими фиксированными осями в анимацию.