我正在使用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()
这导致我在上图中。正如您所看到的那样,勾选标签太长而无法排成一行。因此,我计划在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中使用默认函数/方法更有效地做到这一点。
答案 0 :(得分:7)
有一个matplotlib轴实例ax
(因为它是例如由seaborn图返回),
ax = sns.boxplot(...)
允许以
的形式获取ticklabelsax.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()