Логарифмические оси логарифма с матлотлибом в питоне

Я хочу построить график с одной логарифмической осью, используя matplotlib.

Я читал документы, но не могу понять синтаксис. Я знаю, что это вероятно что-то простое, как "scale = linear" в аргументах сюжета, но я не могу понять, что это правильно.

Пример программы:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.plot(a, color='blue', lw=2)
show()

Ответ 1

Вы можете использовать метод Axes.set_yscale. Это позволяет изменять масштаб после создания объекта Axes. Это также позволит вам создать элемент управления, чтобы пользователь мог выбрать масштаб, если вам нужно.

Соответствующая строка для добавления:

ax.set_yscale('log')

Вы можете использовать "linear" для возврата к линейной шкале. Вот как выглядит ваш код:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.plot(a, color='blue', lw=2)

ax.set_yscale('log')

show()

Ответ 2

Прежде всего, не очень удобно смешивать код pylab и pyplot. Что еще, стиль пистолета предпочтительнее использования pylab.

Вот немного очищенный код, используя только функции pyplot:

from matplotlib import pyplot

a = [ pow(10,i) for i in range(10) ]

pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()

Соответствующая функция pyplot.yscale(). Если вы используете объектно-ориентированную версию, замените ее методом Axes.set_yscale(). Помните, что вы также можете изменить масштаб оси X, используя pyplot.xscale() (или Axes.set_xscale()).

Проверьте мой вопрос В чем разница между 'log и' symlog?, чтобы увидеть несколько примеров графиков, которые предлагает matplotlib.

Ответ 3

Вам просто нужно использовать semilogy вместо графика:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color='blue', lw=2)
show()

Ответ 4

Я знаю, что это немного не по теме, так как в некоторых комментариях упоминалось, что ax.set_yscale('log') будет "самым приятным" решением. Я думал, что может потребоваться опровержение. Я бы не рекомендовал использовать ax.set_yscale('log') для гистограмм и графиков. В моей версии (0.99.1.1) я сталкиваюсь с некоторыми проблемами рендеринга - не знаю, насколько это вообще проблема. Однако как в bar, так и в hist есть необязательные аргументы, чтобы установить y-масштаб в журнал, который отлично работает.

ссылки: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist

Ответ 5

Итак, если вы просто используете неиспользуемый API, как я часто бываю (я использую его в ipython много), то это просто

yscale('log')
plot(...)

Надеюсь, это поможет кому-то найти простой ответ!:.)