Построение графиков с логарифмическими осями
Я хочу построить график с одной логарифмической осью, используя библиотеку matplotlib.
Вот пример программы:
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)
plt.show()
Однако у меня не получается установить одну из осей в логарифмическом масштабе. Как это можно сделать?
3 ответ(ов)
Если вы хотите изменить основание логарифма, просто добавьте:
plt.yscale('log', base=2)
Обратите внимание, что до версии Matplotlib 3.3 вам нужно было использовать параметры basex
и basey
для задания оснований логарифмов.
Я понимаю, что это немного не по теме, так как в некоторых комментариях упоминалось, что ax.set_yscale('log')
— это "самое лучшее" решение, но мне кажется, стоит внести поправку. Я бы не рекомендовал использовать ax.set_yscale('log')
для гистограмм и столбчатых графиков. В моей версии (0.99.1.1) я столкнулся с некоторыми проблемами отображения — не уверен, насколько это распространённая проблема. Тем не менее, как для столбчатых графиков, так и для гистограмм имеются необязательные аргументы, позволяющие установить логарифмическую шкалу по оси Y, которые работают нормально.
Ссылки: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist
Если вы просто используете незамысловатый API, как это часто делаю я (я много работаю с ним в ipython), то это просто
yscale('log')
plot(...)
Надеюсь, это поможет кому-то, кто ищет простой ответ! 😃
Изменение частоты делений по оси X или Y
Сохранить график в файл изображения вместо его отображения
Как задать пределы осей в Matplotlib?
Когда использовать cla(), clf() или close() для очистки графика?
Размер маркеров в графиках рассеяния с помощью pyplot