【问题标题】:Does Seaborn distplot not support a range?Seaborn distplot 不支持范围吗?
【发布时间】:2016-09-01 22:50:30
【问题描述】:

我有一个数据数组,称为 data1,其中包含从 0 到超过一千的值。我只想有一个直方图和一个从 0 到 10 的值的 KDE。因此我写道:

sns.distplot(data1, kde=True, hist=True, hist_kws={"range": [0,10]})
plt.show()

然而,我得到的是所有值的直方图(一直到 2000 年代)。

【问题讨论】:

  • @imaluengo: bins= 如果我没记错的话,只会影响 number 个 bin。
  • 是的。我弄错了问题(所以我删除了评论:P)。如果我确实正确理解了问题,请在下面找到一个也许有效的答案。

标签: python matplotlib seaborn


【解决方案1】:

您可以过滤您的数据并在过滤后的数据上调用displot:

filtered = data1[(data1 >= 0) & (data1 < 10)]
sns.distplot(filtered, kde=True, hist=True, hist_kws={"range": [0,10]})
plt.show()

假设 data1 是一个 numpy 数组。

【讨论】:

  • 嗨,Imanol。如果我有从 1 到 10 的值,并且我想在 [-5, 100] 范围内绘制直方图,该怎么办?过滤方法不起作用。
  • 不应使用此方法。您更改了数据,这将给出不同的概率密度函数。
【解决方案2】:

您可以为Axes 对象设置sns 返回的范围。

ax = sns.distplot(data1, kde=True, hist=True, hist_kws={"range": [0,10]})
ax.set_xlim(0, 10)

【讨论】:

  • ax = sns.distplot(data1, kde=True, hist=True) ax.set_xlim(0, 10) 将起作用
【解决方案3】:

如果您希望仅针对 [0,10] 中的值计算 KDE 和直方图,您可以使用参数 kde_kws={"clip":(0,10)}, hist_kws={"range":(0,10)}:

sns.distplot(data1, kde=True, hist=True, kde_kws={"clip":(0,10)}, hist_kws={"range":(0,10)})
plt.show()

【讨论】:

    【解决方案4】:

    确实如此,只需在声明绘图后将 plt.xlim(x,x1) 放在一行中,生成的绘图将只有 x 和 x1 之间的 x 值。您可以使用 ylim 对 y 轴执行相同操作。

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 2019-08-03
      • 2018-06-25
      • 2018-02-05
      • 2016-09-29
      • 1970-01-01
      • 2012-10-30
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多