matplotlib 带有LogLocator的主要网格线是否行为不正确?

af7jpaap  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(165)

我试图用粗线标记semilogx图的主要网格线。然而,下面的代码(SSCCE)只突出显示了每隔一条网格线。

import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, LogLocator)

# configuration
xValues = [0.1, 1, 10, 100, 1e3, 10e3, 100e3, 1e6, 10e6, 100e6]
yValues = [-70, -95,  -135, -165, -175, -180, -180, -180, -180, -180]

# plot 
fig = plt.figure(1, figsize=[10, 5], dpi=150)
ax = fig.subplots(1,1)

plt.semilogx(xValues, yValues)
plt.minorticks_on()

ax.yaxis.set_major_locator(MultipleLocator(10))
ax.yaxis.set_minor_locator(MultipleLocator(5))
ax.xaxis.set_major_locator(LogLocator(base=10.0))
ax.xaxis.set_minor_locator(LogLocator(base=10.0,subs=(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9),numticks=72))

plt.grid(True, axis='both', which='major', linestyle="-", linewidth=0.8, color=(0.6, 0.6, 0.6))
plt.grid(True, axis='both', which='minor', linestyle="-", linewidth=0.5, color=(0.9, 0.9, 0.9))

plt.tight_layout()
plt.show()

有什么好方法可以达到我的目的吗?(在图中,您可以看到x轴只在每隔一个十年而不是每十年高亮显示)。由于轴标签也在不同的高度上,我相信原因是主网格线不正确?

pcrecxhr

pcrecxhr1#

看起来默认的numticks失败了。
numticks:无或整数,默认值:无给定轴上允许的最大刻度数。只要此定位器已使用~.axis.Axis.get_tick_space分配给轴,默认值None将尝试智能选择,否则福尔斯9。
您可以尝试设置一个较大的数字(100np.inf):

ax.xaxis.set_major_locator(LogLocator(base=10.0, numticks=100))
ax.xaxis.set_minor_locator(LogLocator(base=10.0, numticks=100),
                           subs=(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9))

或者:

ax.xaxis.set_major_locator(LogLocator(base=10.0, numticks=np.inf))
ax.xaxis.set_minor_locator(LogLocator(base=10.0, numticks=np.inf), 
                           subs=(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9))

相关问题