Matplotlib - 对数刻度,但需要非对数标签

时间:2011-06-21 19:57:44

标签: python matplotlib

如何阻止y轴在y轴上显示对数表示法标签?

我对对数刻度感到满意,但想要显示绝对值,例如: [00,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 个答案:

答案 0 :(得分:31)

如果我理解正确,

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)))))

应该有效。如果刻度标签位置在4.99之类的位置,'%d'会出现问题,但你明白了。

请注意,您可能需要对次要格式化程序set_minor_formatter执行相同操作,具体取决于轴的限制。

答案 1 :(得分: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()