Matplotlib / pyplot: как обеспечить диапазон оси? - PullRequest
50 голосов
/ 09 ноября 2010

Я хотел бы нарисовать стандартную двухмерную линейную диаграмму с помощью графика, но заставить значения осей быть между 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 ]

35 голосов
/ 09 ноября 2010

Вызов p.plot после установки пределов - вот почему он масштабируется. Вы правы в том, что отключение автоматического масштабирования даст правильный ответ, как и вызов xlim() или ylim() после вашей plot команды.

Я использую это довольно часто, чтобы инвертировать ось X, я работаю в астрономии, и мы используем систему величин, которая является обратной (то есть более яркие звезды имеют меньшую величину), поэтому я обычно меняю границы с

lims = xlim()
xlim([lims[1], lims[0]]) 
26 голосов
/ 09 ноября 2010

Чтобы ответить на мой вопрос, нужно отключить автоматическое масштабирование ...

p.axis([0.0,600.0, 10000.0,20000.0])
ax = p.gca()
ax.set_autoscale_on(False)
11 голосов
/ 04 апреля 2015

Я попробовал все вышеперечисленные ответы, а затем подвел итог, как нарисовать изображение с фиксированными осями. Это применимо как к функции show, так и к функции savefig.

  1. перед тем, как строить сюжет:

    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. После сюжета:

    1. Показать изображение:

      fig.show()
      
    2. Для сохранения рисунка:

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

Я обнаружил, что позиция axis в начале кода не будет работать, хотя я установил autoscale_on в False.

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

7 голосов
/ 09 ноября 2010

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

...