使用 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()
我正在用 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()