在MatPlotLib中,我想绘制一个具有线性x轴和对数y轴的图。对于x轴,应该在4的倍数处有标签,在1的倍数处有次要刻度。我已经能够使用MultipleLocator
类来实现这一点。
然而,我很难对对数y轴做类似的事情。我希望在0.1、0.2、0.3等处有标签,在0.11、0.12、0.13等处有小刻度。我尝试过使用LogLocator
类来实现这一点,但我不确定正确的参数是什么。
以下是我一直在努力的:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
y = [0.32, 0.30, 0.28, 0.26, 0.24, 0.22, 0.20, 0.18, 0.16, 0.14, 0.12, 0.10]
fig = plt.figure()
ax1 = fig.add_subplot(111)
x_major = MultipleLocator(4)
x_minor = MultipleLocator(1)
ax1.xaxis.set_major_locator(x_major)
ax1.xaxis.set_minor_locator(x_minor)
ax1.set_yscale("log")
y_major = LogLocator(base=10)
y_minor = LogLocator(base=10)
ax1.yaxis.set_major_locator(y_major)
ax1.yaxis.set_minor_locator(y_minor)
ax1.plot(x, y)
plt.show()
这显示了以下图:
x轴是我想要的,但不是y轴。在y轴上0.1处有标签,但在0.2和0.3处没有标签。此外,在0.11、0.12、0.13等处没有刻度。
我尝试了LogLocator
构造函数的一些不同的值,例如subs
、numdecs
和numticks
,但我无法得到正确的图。www.example.com上的文档https://matplotlib.org/api/ticker_api.html#matplotlib.ticker.LogLocator并没有很好地解释这些参数。
我应该使用哪些参数值?
1条答案
按热度按时间bbuxkriu1#
我认为你仍然需要
MultipleLocator
而不是LogLocator
,因为你想要的刻度位置仍然是“on every integer that is multiple of base in the view interval”而不是“subs[j] * base**i”。例如:LogLocator
始终将主记号标签放在“every base**i”处。因此,不可能将其用于所需的主要刻度标签。您可以使用参数subs
作为次要刻度标签,如下所示: