使用 seaborn/matplotlib 箱线图时的刻度频率

tick frequency when using seaborn/matplotlib boxplot

我正在用 seaborn 绘制一系列箱线图

sns.boxplot(full_array)

其中 full_array 包含 200 个数组。 因此,我在 x 轴上有 200 个箱形图和刻度,从 0 到 200。

xticks 彼此太靠近,我想只显示其中的一些,例如,每 20 个左右有一个标记的 xticks。

我尝试了上面提到的几种解决方案 here 但它们没有用。

每次我对 xticks 进行采样时,我都会得到错误的刻度标签,因为它们从 0 到 N 以单位间距编号。

例如,在行 ax.xaxis.set_major_locator(ticker.MultipleLocator(20)) 中,我每 20 次得到一个带标签的 xtick,但标签是 1、2、3、4 而不是 20、40、60、80...

感谢所有乐于助人的人。

seaborn 箱线图使用 FixedLocator 和 FixedFormatter,即

print ax.xaxis.get_major_locator()
print ax.xaxis.get_major_formatter()

打印

<matplotlib.ticker.FixedLocator object at 0x000000001FE0D668>
<matplotlib.ticker.FixedFormatter object at 0x000000001FD67B00>

因此,将定位器设置为 MultipleLocator 是不够的,因为刻度值仍将由固定格式化程序设置。

相反,您可能想要设置一个 ScalarFormatter,它将刻度标签设置为对应于它们所在位置的数字。

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn.apionly as sns
import numpy as np

ax = sns.boxplot(data = np.random.rand(20,30))

ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())

plt.show()