带有一些缺失值和许多索引的堆积条形图
Posted
技术标签:
【中文标题】带有一些缺失值和许多索引的堆积条形图【英文标题】:Stacked bar plots with some missing values and many indices 【发布时间】:2021-08-03 12:42:34 【问题描述】:我有一个海量DataFrame df
(按'year'
排序):
year gender
1894 male
1895 male
1895 male
1896 male
1900 male
...
2008 male
2008 female
2009 male
2009 female
2009 female
我的目标是制作一个堆叠条形图,其中 x 轴为 'year'
,y 轴为这些年份值的出现次数,['gender'] == 'female'
在每个条形的 ['gender'] == 'male'
之上。
我尝试了以下方法:
import plotly.express as px
df['freq'] = df.groupby('year')['gender'].transform('count')
fig = px.bar(df, x="year", y="freq", color='gender')
fig.show()
但是,这会占用过多的运行时间并返回一个空白图表。因此,我没有使用plotly
创建堆积条形图,而是尝试使用matplotlib
:
import matplotlib.pyplot as plt
df_male = df[df['gender'] == 'male']
df_female = df[df['gender'] == 'female']
X = range(1894, 2010)
plt.bar(X, df_male['year'], color = 'b')
plt.bar(X, df_female['year'], color = 'r', bottom = df_male['year'])
plt.show()
但这会返回ValueError: shape mismatch: objects cannot be broadcast to a single shape
,我想知道这是不是因为df
中的1894 年和2009 年之间有一些年份不存在(例如1897、1898、1899 等)。
任何能帮助我更进一步的见解将不胜感激。
【问题讨论】:
df_male
和 df_female
的大小是多少?
@user_na 可能就是这样。它们非常不均匀:df_male
的长度约为 485,000,而 df_female
的长度约为 45,000。但是难道没有办法按照它们每年的频率来堆叠它们吗?
您似乎错过了在过滤后的数组中按年份创建直方图的步骤。您将需要这两个年份列的直方图。见***.com/questions/13129618/…
【参考方案1】:
最简单的解决方案是 seaborn 0.11 的 histplot
:
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.DataFrame('year': np.random.randint(1894, 2010, 200),
'gender': np.random.choice(['male', 'female'], 200))
sns.histplot(data=df, x='year', hue='gender', discrete=True, multiple='stack')
另一种选择是按如下方式创建分组数据框,然后使用 pandas 的绘图:
df.groupby(['year', 'gender']).size().unstack().plot.bar(stacked=True)
这里df.groupby(['year', 'gender']).size()
使用年份和性别作为索引创建了一个系列。 unstack()
将性别索引转换为具有两列的数据框。未堆叠的数据帧也可以发送到 plotly。它看起来像:
gender female male
year
1894 1.0 3.0
1895 1.0 4.0
1896 NaN 1.0
1897 NaN 2.0
....
【讨论】:
以上是关于带有一些缺失值和许多索引的堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(设置坐标轴为百分比以显示缺失值的比例)
R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式)
R语言ggplot2可视化:使用堆叠的条形图(Stacked Barplot)可视化每个数据行(row)的缺失值的情况(Visualizing missing data counts in rows)