提问人:Leo 提问时间:10/4/2023 最后编辑:tmdavisonLeo 更新时间:10/4/2023 访问量:46
对数轴大刻度和小刻度
logarithmic axis major and minor ticks
问:
在 python 的 matplotlib 中,我怎样才能使对数 x 轴刻度如附图所示(即,从 1 到 4.5 每 0.5 间距有标签的大刻度;每 0.1 间距没有标签的小刻度):
我尝试了一些方法,例如
ax1.set_xticks([1.5,2,2.5,3,3.5,4,4.5])
ax1.xaxis.set_major_formatter(FormatStrFormatter('%.1f'))
ax1.xaxis.set_minor_locator(LogLocator(base=1,subs=(0.1,)))
但它并没有给我正确的解决方案。
答:
0赞
Roman Pavelka
10/4/2023
#1
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.semilogx()
a, b = 1, 4.5
step_minor, step_major = 0.1, 0.5
minor_xticks = np.arange(a, b + step_minor, step_minor)
ax.set_xticks(minor_xticks, minor=True)
ax.set_xticklabels(["" for _ in minor_xticks], minor=True)
xticks = np.arange(a, b + step_major, step_major)
ax.set_xticks(xticks)
ax.set_xticklabels(xticks)
ax.set_xlim([a, b])
plt.show()
评论
0赞
tmdavison
10/6/2023
ax.semilogx()
是一个绘图函数(即类似于 ),它还将 x 轴的刻度设置为对数。如果您只想更改 x 轴刻度,则有一个专用功能:ax.plot()
ax.set_xscale('log')
1赞
tmdavison
10/4/2023
#2
您可以使用 MultipleLocator
设置刻度的位置。您可以使用 ax.xaxis.set_major_locator
和 ax.xaxis.set_minor_locator
为主要和次要分时设置不同的倍数。
至于刻度标签的格式:您可以使用带有 ScalarFormatter
的 ax.xaxis.set_major_formatter
设置主要刻度格式,并使用带有 NullFormatter
的 ax.xaxis.set_minor_formatter
关闭次要刻度标签。
例如:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# set the xaxis to a logarithmic scale
ax.set_xscale('log')
# set the desired axis limits
ax.set_xlim(1, 4.5)
# set the spacing of the major ticks to 0.5
ax.xaxis.set_major_locator(plt.MultipleLocator(0.5))
# set the format of the major tick labels
ax.xaxis.set_major_formatter(plt.ScalarFormatter())
# set the spacing of the minor ticks to 0.1
ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))
# turn off the minor tick labels
ax.xaxis.set_minor_formatter(plt.NullFormatter())
plt.show()
评论