如何绘制从不同列着色的堆叠 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)