如何使用 seaborn 绘制每个离散变量的计数(这里计数不仅仅是频率,而是定义的值)[关闭]
Posted
技术标签:
【中文标题】如何使用 seaborn 绘制每个离散变量的计数(这里计数不仅仅是频率,而是定义的值)[关闭]【英文标题】:How to plot the count of each discrete variable using seaborn (here count is not simply the frequency but a defined value) [closed] 【发布时间】:2021-07-15 01:56:31 【问题描述】:我有一个熊猫数据框。 pandas 数据框有一个“小时”列,它仅包含从 1 到 24 的整数值,但每小时有多个条目。还有一个名为“counts”的列给出了每个整数小时的计数。
我想创建一个直方图,最好在 seaborn 中使用distplot
来计算每个整数小时相对于小时的计数。我可以分别总结每个不同小时的计数,然后绘制它,但我想知道是否有自动的方法来做到这一点?
例如,假设我有两个第 1 小时的条目,[1, 20], [1, 50]
。对于直方图上的第 1 小时,我希望它绘制 20 + 50 = 70 而不是 2。
【问题讨论】:
distplot
已弃用并由 histplot
取代
始终提供完整的minimal reproducible example,其中包含代码、数据、错误、当前输出和预期输出,如 formatted text。如果相关,只有绘图图像是可以的。请参阅How to ask a good question。使用How to provide a reproducible copy of your DataFrame using df.to_clipboard(sep=',')
提供数据,然后edit 您的问题,然后将剪贴板粘贴到代码块中。
@TrentonMcKinney histplot
做 distplot
所做的一切吗?
查看文档seaborn.pydata.org/generated/seaborn.distplot.html
【参考方案1】:
Seaborn 的histplot
接受一个参数weights=
(类似于plt.hist
中的weigths
),它给出了每个x 值的相对权重。设置 discrete=True
可确保围绕这些离散值很好地计算 bin 边界。
或者,可以使用sns.barplot
,将总和用作估计量。这会自动为每个值设置一个 x-tick 并选择一个配色方案。需要ci=None
以避免错误栏。
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
df = pd.DataFrame('hour': np.repeat(np.arange(24), 3),
'count': np.arange(72))
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 4))
sns.histplot(data=df, x='hour', weights='count', discrete=True, color='darkturquoise', ax=ax1)
ax1.set_xticks(np.arange(24))
ax1.set_title('sns.histplot')
sns.barplot(data=df, x='hour', y='count', estimator=np.sum, ci=None, ax=ax2)
ax2.set_title('sns.barplot')
plt.tight_layout()
plt.show()
【讨论】:
何时应该使用 barplot 而不是 histplot?直方图似乎有很多选择。然后还有displot、countplot、distplot(上面的用户说不推荐使用) 在这种情况下使用 seaborn,您可以在histplot
和 barplot
之间进行选择。这里histplot
很方便,因为discrete
和weights
选项。 barplot
更笼统。 Matplotlib 的plt.hist
用于离散数据有点棘手。 displot
在您需要具有可比较设置的多个子图时很有用。 countplot
类似于 histplot
用于离散数据,但没有 weights
选项。 distplot
只是 histplot
和 kdeplot
的旧版本。
如果我将小时变量转换为分类变量,它似乎不再适用于histplot
。其他选项之一是否更适合分类变量?
histplot
确实需要 x 轴的数字,它不能用于分类变量。以上是关于如何使用 seaborn 绘制每个离散变量的计数(这里计数不仅仅是频率,而是定义的值)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用“融化”分组的seaborn计数图上获得高于柱的值
解决报错:使用seaborn绘制计数图时出现错误:ValueError: s must be a scalar, or the same size as x and y(图文并茂版!!)