Логарифмические оси логарифма с матлотлибом в питоне
Я хочу построить график с одной логарифмической осью, используя 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(...)
Надеюсь, это поможет кому-то найти простой ответ!:.)