如何绘制 pandas 数据框中一列中位数的堆积条形图?
How can I plot a stacked bar chart of median of a column in pandas dataframe?
所以我是 pandas (python) 中学习数据可视化的新手,我的任务是为 30 到 35 岁的年龄组创建中位数 WeekHrs 和 CodeRevHrs 的堆叠图表。
以下是我的代码,我在其中提取了对年龄列应用过滤器的数据,下面是我的数据集的前五行
age_filter= agework [(agework["age"]>= 30 )&(agework["age"]<=35)]
median_weekhrs= age_filter["Weekhrs"].median()
median_coderev= age_filter["CodeRevHrs"].median()
age_filter.head()
CodeRevHrs Weekhrs age
5 3.0 8.0 31.0
11 2.0 40.0 34.0
12 2.0 40.0 32.0
18 15.0 42.0 34.0
22 2.0 40.0 33.0
如何绘制带有中位数的堆积条形图?
请帮忙
首先,过滤年龄(并将年龄转换为 int
,因为它使标签更清晰):
df = agework.query('30 <= age <= 35')
df['age'] = df['age'].astype(int)
然后,您可以绘制每个年龄组中两个数量的中位数的条形图:
df.groupby('age').median().plot.bar(stacked=True)
plt.title('Median hours, by age')
顺便说一句,您可以对值的堆叠方式施加任意顺序。例如,如果您希望在底部显示 'Weekhrs'
,您可以说:
order = ['Weekhrs', 'CodeRevHrs']
df.groupby('age')[order].median().plot.bar(stacked=True)
plt.title('Median hours, by age')
现在,如果您想绘制整个过滤年龄范围内这些数量的 总体 中位数(如您所说:每个数量一个数字),那么一个方式(在许多中)将是:
label = f"{df['age'].min()}-{df['age'].max()}"
df.median().drop('age').to_frame(label).T.plot.bar(stacked=True)
plt.title(f'Median hours for age {label}')
所以我是 pandas (python) 中学习数据可视化的新手,我的任务是为 30 到 35 岁的年龄组创建中位数 WeekHrs 和 CodeRevHrs 的堆叠图表。
以下是我的代码,我在其中提取了对年龄列应用过滤器的数据,下面是我的数据集的前五行
age_filter= agework [(agework["age"]>= 30 )&(agework["age"]<=35)]
median_weekhrs= age_filter["Weekhrs"].median()
median_coderev= age_filter["CodeRevHrs"].median()
age_filter.head()
CodeRevHrs Weekhrs age
5 3.0 8.0 31.0
11 2.0 40.0 34.0
12 2.0 40.0 32.0
18 15.0 42.0 34.0
22 2.0 40.0 33.0
如何绘制带有中位数的堆积条形图?
请帮忙
首先,过滤年龄(并将年龄转换为 int
,因为它使标签更清晰):
df = agework.query('30 <= age <= 35')
df['age'] = df['age'].astype(int)
然后,您可以绘制每个年龄组中两个数量的中位数的条形图:
df.groupby('age').median().plot.bar(stacked=True)
plt.title('Median hours, by age')
顺便说一句,您可以对值的堆叠方式施加任意顺序。例如,如果您希望在底部显示 'Weekhrs'
,您可以说:
order = ['Weekhrs', 'CodeRevHrs']
df.groupby('age')[order].median().plot.bar(stacked=True)
plt.title('Median hours, by age')
现在,如果您想绘制整个过滤年龄范围内这些数量的 总体 中位数(如您所说:每个数量一个数字),那么一个方式(在许多中)将是:
label = f"{df['age'].min()}-{df['age'].max()}"
df.median().drop('age').to_frame(label).T.plot.bar(stacked=True)
plt.title(f'Median hours for age {label}')