Matplotlib - логарифмическая шкала, но требует не логарифмических меток
Как я могу остановить ось 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()
Ответы
Ответ 1
Если я правильно понял, после
import matplotlib.ticker
любой из
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, но вы получаете идею.
Ответ 2
Использовать ticker.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()