Подтвердить что ты не робот

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()
4b9b3361

Ответ 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()