【问题标题】:Rotate label text in seaborn factorplot在seaborn factorplot中旋转标签文本
【发布时间】:2014-12-19 19:49:46
【问题描述】:

我有一个简单的因子图

import seaborn as sns
g = sns.factorplot("name", "miss_ratio", "policy", dodge=.2, 
    linestyles=["none", "none", "none", "none"], data=df[df["level"] == 2])

问题是 x 标签都一起运行,使它们不可读。如何旋转文本以使标签可读?

【问题讨论】:

  • import matplotlib.pylab as pltplt.xticks(rotation=‌​45)
  • Dexplot library 能够在不使用 matplotlib 的情况下包装标签、设置图形大小、dpi。

标签: matplotlib seaborn


【解决方案1】:

我对@mwaskorn 的回答有疑问,即

g.set_xticklabels(rotation=30)

失败,因为这也需要标签。比@Aman 的答案简单一点就是添加

plt.xticks(rotation=45)

【讨论】:

  • 你也可以像g.set_xticklabels(g.get_xticklabels(), rotation=30)这样获取标签。如果要抑制输出,请将其分配给变量。
  • 我认为这是正确的,当设置 plt.xtics 为我工作时。
  • 为小提琴情节尝试了上述所有选项,而 plt.xticks(rotation=n) 只是我可以开始工作的一个选项
  • 当我尝试这个时,我的 xticklabels 不再与 x 刻度对齐。有谁知道为什么?
  • 我建议也添加plt.tight_layout(),以便调整边距以适合文本
【解决方案2】:

您可以在 matplotlib Axes 对象上使用 tick_params 方法旋转刻度标签。举个具体的例子:

ax.tick_params(axis='x', rotation=90)

【讨论】:

  • 我收到一个错误:IndexError:索引过多。我的代码! g = sns.factorplot("month_date", "num_proposals", "account", sorted_data, col="account",col_wrap=3,sharex=False); g.set_xticklabels(rotation=30)
  • @soupault - 这对我有用,类似于你想出的,但可能更干净 - 对于 g.axes.flatten() 中的 ax:ax.set_xticklabels(ax.get_xticklabels(),旋转=30)
  • 使用 ha="right" 将 x 轴标签与其刻度线居中对齐。即g.set_xticklabels([label1, label2], rotation=30, ha='right')
  • 类似于上面的几个 cmets,这给了我一个错误,直到我将 g.set_xticklabels(rotation=30) 更改为 g.set_xticklabels(g.get_xticklabels(), rotation=30) 感谢这个答案:stackoverflow.com/a/39689464/1870832
  • 一些 Seaborn 绘图方法返回一个 FacetGrid 对象,一些返回一个 Matplotlib Axes 对象。对于前者,不设置标签将起作用,对于后者,它不会。您可以通过查看文档了解哪些是 FacetGrid 对象:seaborn.pydata.org/api.html。例如,如果您使用g = sns.catplot(),这将起作用,但sns.barplot() 不会,因为它返回一个Axes 对象。
【解决方案3】:

这仍然是一个 matplotlib 对象。试试这个:

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

【讨论】:

    【解决方案4】:

    facetgrid 支持的任何 seaborn 绘图都无法使用(例如 catplot)

    g.set_xticklabels(rotation=30) 
    

    但是 barplot、countplot 等将起作用,因为它们不受 facetgrid 的支持。下面将适用于他们。

    g.set_xticklabels(g.get_xticklabels(), rotation=30)
    

    另外,如果您有 2 个相互重叠的图表,请尝试在支持它的图表上设置 set_xticklabels。

    【讨论】:

      【解决方案5】:

      您也可以使用plt.setp,如下:

      import matplotlib.pyplot as plt
      import seaborn as sns
      
      plot=sns.barplot(data=df,  x=" ", y=" ")
      plt.setp(plot.get_xticklabels(), rotation=90)
      

      将标签旋转 90 度。

      【讨论】:

        【解决方案6】:

        如果有人想知道如何使用 clustermap CorrGrids(给定 seaborn 示例的一部分):

        import seaborn as sns
        import matplotlib.pyplot as plt
        sns.set(context="paper", font="monospace")
        
        # Load the datset of correlations between cortical brain networks
        df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
        corrmat = df.corr()
        
        # Set up the matplotlib figure
        f, ax = plt.subplots(figsize=(12, 9))
        
        # Draw the heatmap using seaborn
        g=sns.clustermap(corrmat, vmax=.8, square=True)
        rotation = 90 
        for i, ax in enumerate(g.fig.axes):   ## getting all axes of the fig object
             ax.set_xticklabels(ax.get_xticklabels(), rotation = rotation)
        
        
        g.fig.show()
        

        【讨论】:

          【解决方案7】:

          对于seaborn.heatmap,您可以使用(基于@Aman's answer)旋转它们

          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
          

          【讨论】:

          • 这对我有用,只是传入旋转参数什么也没做,我还必须传入标签才能使其正常工作
          【解决方案8】:

          matplotlib.pyplot.xticks 可以做到这一点

          import matplotlib.pyplot as plt
          
          plt.xticks(rotation = 'vertical')
          
          # Or use degrees explicitly 
          
          degrees = 70  # Adjust according to one's preferences/needs
          plt.xticks(rotation=degrees)
          

          Here one can see an example 了解它的工作原理。

          【讨论】:

            【解决方案9】:

            使用ax.tick_params(labelrotation=45)。您可以将其应用于绘图中的轴图,而无需提供标签。如果这不是您想要的路径,这是使用 FacetGrid 的替代方法。

            【讨论】:

              【解决方案10】:

              如果标签的名称很长,则可能难以正确使用。使用catplot 对我来说效果很好的解决方案是:

              import matplotlib.pyplot as plt
              fig = plt.gcf()
              fig.autofmt_xdate()
              

              【讨论】:

                猜你喜欢
                • 2021-10-06
                • 2017-12-10
                • 1970-01-01
                • 2015-10-29
                • 1970-01-01
                • 2019-08-25
                • 2017-01-02
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多