Cod*_*ung 5 python matplotlib xticks x-axis
我目前正在尝试绘制一个带有很多刻度的图形。它对每个值都有从 0 到 50 的刻度,导致打包的刻度标签合并,使绘图变得非常混乱。我使用了刻度线
fig, ax = plt.subplots()
ax.set_xticks(np.arange(0,50))
ax.set_yticks(np.arange(0,50))
Run Code Online (Sandbox Code Playgroud)
并使用隐藏刻度标签
ax.set_xticklabels([])
ax.set_yticklabels([])
Run Code Online (Sandbox Code Playgroud)
然而,问题是这隐藏了所有刻度标签,而我希望保留一些标签,以便我可以使用标签轻松跟踪。
我试过做
ax.set_xticklabels(np.arange(0,50,5))
Run Code Online (Sandbox Code Playgroud)
但这只会导致前 10 个刻度使用不适当的标签进行标记(范围(0,50),间隔为 5)
我希望找到一种方法来显示间隔为 5(或任何特定间隔)的刻度“标签”,同时保留所有实际刻度(以便我可以将它们用于网格)。
Matplotlib 使您可以使用定位器和格式化程序完全控制刻度和标签。set_xticks这通常比通过和将刻度和标签设置为某些固定值更可取set_xticklabels。
仅标记某些刻度的两个选项:
您可以使用 aFuncFormatter将标签设置为刻度值或空字符串,""具体取决于某些条件。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
fig, ax = plt.subplots()
ax.plot([0,49],[1,8])
ax.xaxis.set_major_locator(mticker.MultipleLocator())
def func(x, pos):
if not x%5:
return "{:g}".format(x)
else:
return ""
ax.xaxis.set_major_formatter(mticker.FuncFormatter(func))
plt.show()
Run Code Online (Sandbox Code Playgroud)
人们可以使用主要刻度进行标记,而使用次要刻度保持未标记。可选地,可以使次要刻度与主要刻度一样大。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
fig, ax = plt.subplots()
ax.plot([0,49],[1,8])
ax.xaxis.set_major_locator(mticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(mticker.MultipleLocator(1))
ax.xaxis.set_minor_formatter(mticker.NullFormatter())
# optionally make the minorticks as large as the major ticks
#ax.tick_params(axis="x", which="both", length=4)
plt.show()
Run Code Online (Sandbox Code Playgroud)