如何绘制从不同列着色的堆叠 seaborn 直方图

Posted

技术标签:

【中文标题】如何绘制从不同列着色的堆叠 seaborn 直方图【英文标题】:How to plot a stacked seaborn histogram colored from a different column 【发布时间】:2021-04-17 20:18:51 【问题描述】:

我的数据集是这样的

 Days     Visitors

Tuesday    23
Monday     30
Sunday    120
Friday     2
Friday    30
Tuesday   13
Monday    20
Saturday  100

如何为这个数据集绘制直方图,但假设它是一个大数据集(560030 行),而不仅仅是这些值。

实际上,我想在 x 轴上显示天数,在 Y 轴上显示访客数。

【问题讨论】:

【参考方案1】: 使用seaborn,它是matplotlib 的API。 seaborn.histplot seaborn.displot 这将显示一周中每一天的访问者数量分布。

sns.histplot

import seaborn as sns
import pandas as pd
import numpy as np  # for test data
import random  # for test data
import calendar  # for test data

# test dataframe
np.random.seed(365)
random.seed(365)
df = pd.DataFrame('Days': random.choices(calendar.day_name, k=1000), 'Visitors': np.random.randint(1, 121, size=(1000)))

# display(df.head(6))
        Days  Visitors
0     Friday        83
1     Sunday        53
2   Saturday        34
3  Wednesday        92
4    Tuesday        45
5  Wednesday         6

# plot the histogram
sns.histplot(data=df, x='Visitors', hue='Days', multiple="stack")

绘制直方图后,如果需要移动图例,可能需要使用seaborn issue: Not clear how to reposition seaborn.histplot legend #2280 中的解决方法。

sns.distplot

此选项最清楚地传达了访问者数量的每日分布
sns.displot(data=df, col='Days', col_wrap=4, x='Visitors')

条形图

seaborn.barplot 这将显示给定日期所有访问的总和
sns.barplot(data=df, x='Days', y='Visitors', estimator=sum, ci=None)
plt.xticks(rotation=90)

【讨论】:

以上是关于如何绘制从不同列着色的堆叠 seaborn 直方图的主要内容,如果未能解决你的问题,请参考以下文章

创建使用百分比而不是计数的 matplotlib 或 seaborn 直方图?

python 示例显示如何使用累积比绘制直方图。使用seaborn.FacetGrid()绘制多个直方图。

如何从 Pandas DataFrame 开始绘制堆叠时间直方图?

在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

使用 seaborn 绘制多个直方图