Matplotlib - логарифмическая шкала, но требуются нелогарифмические метки - PullRequest
22 голосов
/ 21 июня 2011

Как можно остановить ось Y, отображая метку логарифмической записи на оси Y?

Я доволен логарифмической шкалой, но хочу отобразить абсолютные значения, например, [500, 1500, 4500, 11000, 110000] по оси Y.Я не хочу явно маркировать каждый тик, так как ярлыки могут измениться в будущем (я пробовал разные форматеры, но не смог заставить их работать).Пример кода ниже.

Спасибо,

-collern2

import matplotlib.pyplot as plt
import numpy as np

a = np.array([500, 1500, 4500, 11000, 110000])
b = np.array([10, 20, 30, 40, 50])

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_yscale('log')

plt.plot(b, a)
plt.grid(True)
plt.show()

Ответы [ 2 ]

31 голосов
/ 22 июня 2011

Если я правильно понимаю,

ax.set_yscale('log')

любой из

ax.yaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.yaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter('%d'))
ax.yaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, pos: str(int(round(x)))))

должен работать.У «% d» будут проблемы, если места с метками тиканья окажутся в местах, подобных 4.99, но вы поймете эту идею.

Обратите внимание, что вам может потребоваться сделать то же самое с второстепенным форматером, set_minor_formatter,в зависимости от границ осей.

2 голосов
/ 04 ноября 2015

Использовать тикер.FormatStrFormatter

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

a = np.array([500, 1500, 4500, 11000, 110000])
b = np.array([10, 20, 30, 40, 50])

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_yscale('symlog')

ax.yaxis.set_major_formatter(ticker.FormatStrFormatter("%d"))

plt.plot(b, a)
plt.grid(True)

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...