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

python matplotlib scale logarithm

524620 просмотра

6 ответа

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

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

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

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

line, = ax.plot(a, color='blue', lw=2)
pylab.show()
Источник Размещён: 10.09.2019 09:34

Ответы (6)


321 плюса

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

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

ax.set_yscale('log')

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

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

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

ax.set_yscale('log')

pylab.show()

таблица результатов

Автор: Mathieu Размещён: 26.07.2009 12:14

262 плюса

Прежде всего, это не очень аккуратно, чтобы смешивать pylabи pyplotкодировать. Более того, стиль 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.

Автор: Denilson Sá Maia Размещён: 18.08.2010 03:10

63 плюса

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

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()
Автор: Scott McCammon Размещён: 21.04.2009 06:07

20 плюса

если вы хотите изменить основание логарифма, просто добавьте:

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log
Автор: Dawid Размещён: 25.12.2017 11:56

8 плюса

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

Автор: user3465408 Размещён: 08.04.2014 06:14

5 плюса

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

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

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

Автор: crazy2be Размещён: 22.03.2017 12:56
Вопросы из категории :
32x32