如何降低 seaborn 中 x-ticks 的密度

新手上路,请多包涵

我有一些数据,我试图根据这些数据在 seaborn 中构建一个计数图。所以我做这样的事情:

 data = np.hstack((np.random.normal(10, 5, 10000), np.random.normal(30, 8, 10000))).astype(int)
plot_ = sns.countplot(data)

并获取我的计数图:

在此处输入图像描述

问题是 x 轴上的刻度太密集(这使它们无用)。我试图用 plot_.xticks=np.arange(0, 40, 10) 降低密度,但没有帮助。

还有没有办法用一种颜色制作情节?

原文由 Salvador Dali 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

滴答频率

这里似乎有多个问题:

  1. 您在使用 plt.xticks 时使用了 = 运算符。您应该改用函数调用(但不是在这里;请先阅读第 2 点)!
  2. seaborn 的计数图返回轴对象,而不是图形
    • 您需要使用更改 x 刻度的轴级方法(这不是 plt.xticks()

尝试这个:

 for ind, label in enumerate(plot_.get_xticklabels()):
    if ind % 10 == 0:  # every 10th label is kept
        label.set_visible(True)
    else:
        label.set_visible(False)

颜色

我认为这里的数据设置对于这种类型的图来说并不是最佳的。 Seaborn 将每个独特的值解释为新的类别并引入新的颜色。如果我是对的,颜色/和 x-ticks 的数量等于 np.unique(data) 的数量。

将您的数据与 seaborn 的示例进行比较(这些示例均基于可以导入进行检查的数据)。

我还认为使用 pandas 数据帧(而不是 numpy 数组;我经常以错误的方式准备数据,子集选择需要预处理;数据帧提供更多)与 seaborn 一起工作要容易得多。我认为大多数 seaborn 的例子都使用这个数据输入。

原文由 sascha 发布,翻译遵循 CC BY-SA 3.0 许可协议

尽管这已经在前一段时间得到了回答,但添加了另一个可能更简单、更灵活的替代方案。

您可以使用 matplotlib 轴刻度定位器 来控制将显示哪些刻度。

在此示例中,您可以使用 LinearLocator 来实现相同的目的:

 import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.ticker as ticker

data  = np.hstack((np.random.normal(10, 5, 10000), np.random.normal(30, 8, 10000))).astype(int)
plot_ = sns.countplot(data)
plot_.xaxis.set_major_locator(ticker.LinearLocator(10))

原文由 Nitzan Volman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题