Seaborn Boxplot:获取xtick标签

Mec*_*nic 3 python matplotlib seaborn

我正在使用Seaborn使用来自pandas数据帧的数据制作一个箱线图.

colorpalette = sns.hls_palette(8,h=.9)
g = sns.boxplot(x="estimator", y="mean_score", data=dFrame, palette=colorpalette)

g.set(ylabel='Mean Accuracy', xlabel='')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这导致我在上图中.正如您所看到的那样,勾选标签太长而无法排成一行.因此,我计划在xticklabels上使用textwrap来跨越多行.为了获得标签,我尝试使用

g.xaxis.get_ticklabels()
Run Code Online (Sandbox Code Playgroud)

返回以下内容

<a list of 9 Text major ticklabel objects>
Run Code Online (Sandbox Code Playgroud)

如果我在这样的循环中尝试它

for item in g.xaxis.get_ticklabels():
    print(item)
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

Text(0,0,'ExtraTreesClassifier')
Text(1,0,'RandomForestClassifier')
Text(2,0,'GradientBoostingClassifier')
Text(3,0,'LogisticRegression')
Text(4,0,'DecisionTreeClassifier')
Text(5,0,'kNearestNeighbors')
Text(6,0,'LinearSVC')
Text(7,0,'Perceptron')
Run Code Online (Sandbox Code Playgroud)

有没有办法在seaborn中使用默认函数/方法更有效地完成它.

Imp*_*est 11

有一个matplotlib轴实例ax(因为它是例如由seaborn图返回),

ax = sns.boxplot(...)
Run Code Online (Sandbox Code Playgroud)

允许获得ticklabels作为

ax.get_xticklabels()
Run Code Online (Sandbox Code Playgroud)

将文本从列表中删除的最简单方法是

texts = [t.get_text()  for t in ax.get_xticklabels()]
Run Code Online (Sandbox Code Playgroud)

包装文本也可以在运行中完成

texts = [textwrap.fill(t.get_text(), 10)  for t in ax.get_xticklabels()]
Run Code Online (Sandbox Code Playgroud)

甚至将文本设置为ticklabels也可以在同一行中完成

ax.set_xticklabels([textwrap.fill(t.get_text(), 10)  for t in ax.get_xticklabels()])
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记`import textwrap`。 (4认同)