python 使用seaborn/matplotlib boxplot时的滴答频率

gab6jxml  于 2023-05-05  发布在  Python
关注(0)|答案(2)|浏览(104)

我在和seaborn一起绘制一系列箱形图

sns.boxplot(full_array)

其中full_array包含200个数组。因此,我在x轴上有200个箱线图和刻度,从0到200。
xtick彼此太近了,我想只显示其中的一部分,例如,每20个左右标记一个xtick。
我尝试了几种解决方案,如提到的here,但他们没有工作。
每次我对xtick进行采样时,我都会得到错误的tick标签,因为它们从0到N编号,具有单位间距。
例如,与行

ax.xaxis.set_major_locator(ticker.MultipleLocator(20))

我每隔20得到一个带标签的xtick,但标签是1,2,3,4而不是20,40,60,80...

rwqw0loc

rwqw0loc1#

海运箱线图使用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,它将ticklabels设置为与其位置处的数字相对应。

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()

busg9geu

busg9geu2#

在seaborn的现代版本(v.0.12.0等)中,tick的值由FuncFormatter设置,因此OP的初始尝试工作正常。

import numpy as np
import seaborn as sns
from matplotlib.ticker import MultipleLocator

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

ax.xaxis.get_major_locator()                    # <matplotlib.ticker.FixedLocator at 0x2221f657340>
ax.xaxis.get_major_formatter()                  # <matplotlib.ticker.FuncFormatter at 0x2221f8e2a00>

ax.xaxis.set_major_locator(MultipleLocator(5))  # show every 5th tick

另一种有效的方法是通过选择每5次来简单地设置xticks。

ax = sns.boxplot(data=data);
ax.set_xticks(ax.get_xticks()[::5]);            # show every 5th tick

相关问题