提问人:brimborium 提问时间:3/9/2023 最后编辑:oguz ismailbrimborium 更新时间:3/10/2023 访问量:31
带有 LogLocator 的主要网格线行为不正确?
major gridlines with LogLocator behave incorrectly?
问:
我正在尝试用较粗的线标记绘图的主要网格线。但是,下面的代码 (SSCCE) 仅突出显示每两条网格线。semilogx
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 轴仅每隔十年突出显示一次,而不是每十年突出显示一次)。由于轴标也在不同的高度上,我相信原因是主要网格线不正确?
答:
1赞
mozway
3/9/2023
#1
看起来默认失败。numticks
numticks : None 或 int,默认值:None 给定轴上允许的最大分时数。默认 的会尽量明智地选择,只要这个 定位器已使用 分配给轴,否则将回退到 9。
None
~.axis.Axis.get_tick_space
您可以尝试设置一个高数字(或):100
np.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))
评论
1赞
brimborium
3/9/2023
设置解决了问题。谢谢!我还不完全明白为什么,但这正是我想要的。numticks=np.inf
评论