Seaborn Boxplot:获取xtick标签

时间:2017-03-15 15:13:35

标签: 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()

enter image description here

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

g.xaxis.get_ticklabels()

返回以下内容

<a list of 9 Text major ticklabel objects>

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

for item in g.xaxis.get_ticklabels():
    print(item)

我得到以下输出

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

有没有办法在seaborn中使用默认函数/方法更有效地做到这一点。

2 个答案:

答案 0 :(得分:7)

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

ax = sns.boxplot(...)

允许以

的形式获取ticklabels
ax.get_xticklabels()

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

texts = [t.get_text()  for t in ax.get_xticklabels()]

包装文本也可以随时进行

texts = [textwrap.fill(t.get_text(), 10)  for t in ax.get_xticklabels()]

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

ax.set_xticklabels([textwrap.fill(t.get_text(), 10)  for t in ax.get_xticklabels()])

答案 1 :(得分:-1)

接受的答案对我不起作用(有这样的消息:“ FacetGrid”对象没有属性“ get_xticklabels”。

但这可行:

g.fig.autofmt_xdate()