【问题标题】:Rotate tick labels for seaborn barplot旋转 seaborn barplot 的刻度标签
【发布时间】:2015-10-29 19:26:01
【问题描述】:

我正在尝试显示带有旋转 x 轴标签的图表,但图表未显示。

import seaborn as sns
%matplotlib inline

yellow='#FFB11E'
by_school=sns.barplot(x ='Organization Name',y ='Score',data = combined.sort('Organization Name'),color=yellow,ci=None)

此时我可以看到图像,但是在设置 xticklabel 后,我不再看到图像,只有对象引用。 (我会发布图片,但我没有足够的声誉:()

by_school.set_xticklabels('Organization Name',rotation=45)

<matplotlib.axes._subplots.AxesSubplot at 0x3971a6a0>

这里发布了一个类似的问题:Rotate label text in seaborn factorplot 但该解决方案不起作用。

【问题讨论】:

  • 您是否在创建它的同一笔记本单元格中旋转标签?你需要
  • 不,我不是,但现在我收到此错误:set_xticklabels() 至少需要 2 个参数(给定 1 个)

标签: python matplotlib seaborn


【解决方案1】:

您需要一个不同的方法调用,即每个ticklables 的.set_rotation。 由于您已经有了刻度标签,只需更改它们的旋转:

for item in by_school.get_xticklabels():
    item.set_rotation(45)

barplot 返回一个matplotlib.axes 对象(截至seaborn 0.6.0),因此您必须以这种方式旋转标签。其他情况,当方法返回FacetGrid对象时,参考Rotate label text in seaborn factorplot

【讨论】:

  • 也可以plt.setp(by_school.get_xticklabels(), rotation=45) 为自己节省一行代码:)
  • 另外,set_xticklabels 不占用位置(与 plt.xticks 不同,这是状态机/面向对象 API 中令人讨厌的不一致的示例)但原始代码不起作用,因为 OP 只是传递单个字符串而不是标签列表。
  • 如果您将 matplotlib.pyplot 作为 plt 导入,也可以使用 plt.xticks(rotation='vertical')
  • 使答案成为单行(如果保存一行很重要):[item.set_rotation(45) for item in by_school.get_xticklabels()]
  • 这对我有用,但如果我在 seaborn 图中包含一个标题,即 sns.barplot(...).set_title('My title') ,我会得到 AttributeError: 'Text' object has no attribute 'get_xticklabels'。有办法解决吗?
【解决方案2】:

使用以下代码语句:

by_school.set_xticklabels(by_school.get_xticklabels(), 
                          rotation=90, 
                          horizontalalignment='right')

【讨论】:

  • 同时添加 horizontalalignment='right' 以便标签匹配刻度。
【解决方案3】:

你可以像这样旋转 seaborn xticks:

sns.barplot(x='Organization Name', y='Score', data=df)

plt.xticks(rotation=70)
plt.tight_layout()

【讨论】:

  • 非常简单!谢谢!
  • 这似乎是最好的解决方案
  • 这对我不起作用——特别是 plt.xticks 用一个空的(带有旋转刻度)覆盖了条形图。我应该做一些不同的事情吗?我使用 Python 3.7 和 Spyder。
【解决方案4】:

如果您来这里是为了旋转seaborn.heatmap 的标签,以下应该可以工作(基于@Aman's answer Rotate label text in seaborn factorplot

pandas_frame = pd.DataFrame(data, index=names, columns=names)
heatmap = seaborn.heatmap(pandas_frame)
loc, labels = plt.xticks()
heatmap.set_xticklabels(labels, rotation=45)
heatmap.set_yticklabels(labels[::-1], rotation=45) # reversed order for y

【讨论】:

  • AttributeError: 'AxesSubplot' object has no attribute 'xticks' 尝试复制此内容时。有什么想法吗?
  • @bmc:你用的是哪个matplotlib.__version__?对于版本2.0.0plt.xticks() 工作:import seaborn as sns; import pandas as pd; import numpy as np; import matplotlib.pyplot as plt; df = pd.DataFrame(np.eye(3), range(3), range(3)); hm = sns.heatmap(df); plt.xticks();
【解决方案5】:

这对我有用:

g.fig.autofmt_xdate()

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多