季度箱形图与月份之和 [复制]

quarterly box plots with the sum of the months [duplicate]

提问人:Budspencer 提问时间:11/13/2023 最后编辑:Budspencer 更新时间:11/15/2023 访问量:64

问:

我想绘制季度箱线图,但每个季度的 3 个月的总和。我能够绘制每个季度的 3 个月平均值的箱线图。我报告代码:

import os
import numpy as np
import pandas as pd
import datetime as dt
import seaborn as sns
import matplotlib.pyplot as plt
 
df_air = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv',
         parse_dates=['Month'], date_parser=lambda x: pd.to_datetime(x, format='%Y-%m', errors = 'coerce'))
df_air.reset_index(inplace=True)

# data  preparation
df_air['year'] = [d.year for d in df_air.Month]
df_air['month'] = [d.strftime('%b') for d in df_air.Month]
df_air['quarter'] = [d.quarter for d in df_air.Month]
years = df_air['year'].unique()

# plot drawing
fig, axes = plt.subplots(3, 1, figsize=(20,20), dpi= 150)
sns.boxplot(x='year', y='#Passengers', data=df_air, ax=axes[0])
sns.boxplot(x='month', y='#Passengers', data=df_air.loc[~df_air.year.isin([1949, 1961]), :], ax=axes[1])
sns.boxplot(x='quarter', y='#Passengers', data=df_air, ax=axes[2])

# set title
axes[0].set_title('year-wise Box Plot\n( Trend)', fontsize=18);
axes[1].set_title('month-wise Box Plot\n( Seasonality)', fontsize=18)
axes[2].set_title('Quarter (average)', fontsize=18)
plt.show()

季度箱线图绘制在平均值(轴 [2])上。我也想在总和上绘制季度箱线图。 换句话说,例如,1949 年第一季度是 112、118 和 132,因此总共(总)362 人(乘客),而 1960 年第一季度是 1,227 人(乘客)。我想要每个季度的箱形图。 我该怎么办?在此处输入图像描述

蟒蛇 numpy seaborn 箱形图

评论

1赞 Suraj Shourie 11/13/2023
你说的季度箱线图是什么意思?
0赞 OCa 11/14/2023
欢迎来到 Stack Overflow。阅读《如何提问》和最小的可重复示例可能会增加获得答案的机会。参加这次旅行也非常有用。
0赞 Budspencer 11/14/2023
我已经附上了图片。换句话说,季度箱形图表示每年 3 个月(每个季度)计算的平均值。相反,我想要计算每年 3 个月(每个季度)的总和。
0赞 Trenton McKinney 11/14/2023
monthly_sum_quarter = df_air.pivot_table(index='quarter', columns='month', values='#Passengers', aggfunc='sum').melt(ignore_index=False).reset_index()然后编码和绘图sns.boxplot(data=monthly_sum_quarter, x='quarter', y='value')
0赞 Trenton McKinney 11/14/2023
在这种情况下,这是更好的选择。将总和聚合成一个长形式供 seaborn 使用:然后 .代码和绘图.groupbymonthly_sum_quarter = df_air.groupby(['quarter', 'month'], as_index=False)['#Passengers'].sum()sns.boxplot(data=monthly_sum_quarter, x='quarter', y='value')

答: 暂无答案