Подтвердить что ты не робот

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() и т.д.

Любые мысли?

Спасибо.

4b9b3361

Ответ 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.

  • перед построением:

    fig = pylab.figure()
    ax = fig.gca()
    ax.set_autoscale_on(False)
    

Это запрос ax, который subplot(1,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])
    
  2. После графика:

    • Чтобы показать изображение:

      fig.show()
      
    • Чтобы сохранить рисунок:

      fig.savefig('the name of your figure')
      

Я выясню, что put axis в начале кода не будет работать, хотя я установил autoscale_on в False.

Я использовал этот код для создания серии анимации. И ниже приведен пример расчесывания нескольких неподвижных изображений осей в анимацию. img

Ответ 4

Попробуйте поместить вызов axis после всех команд построения.