技术请求:基于df_7数据集生成含三类Rating指标的柱状图
生成多指标时间序列柱状图
需求说明
绘制柱状图,展示单用户(经fide_id筛选后)的rating_standard、rating_rapid、rating_blitz三类评分随时间(年月)的变化,每个时间点对应三根并列柱子。
数据准备
已提供的数据筛选代码:
df_7 = df3[(df3['fide_id'] == 14109336)]
注:数据集示例中fide_id为146116,与筛选条件存在差异,需确认实际筛选ID是否正确。
df_7数据集结构及部分样本:
| fide_id | year | month | rating_standard | rating_rapid | rating_blitz |
|---|---|---|---|---|---|
| 146116 | 2015 | 1 | 2530.0 | 2599.0 | 2540.0 |
| 146116 | 2015 | 2 | 2530.0 | 2530.0 | 2530.0 |
| ..... | |||||
| 146116 | 2021 | 3 | 2546.0 | 2546.0 | 2546.0 |
| 146116 | 2021 | 4 | 2546.0 | 2521.0 | 2608.0 |
绘图实现方案
方案1:Matplotlib 绘制并列柱状图
先将年月合并为日期列,优化X轴展示:
import pandas as pd import matplotlib.pyplot as plt # 合并年月为标准日期格式 df_7['date'] = pd.to_datetime(df_7[['year', 'month']].assign(day=1)) dates = df_7['date'] x = range(len(dates)) bar_width = 0.25 # 单根柱子宽度 # 创建画布 plt.figure(figsize=(12, 6)) # 分别绘制三类评分的柱子 plt.bar([i - bar_width for i in x], df_7['rating_standard'], width=bar_width, label='标准分') plt.bar(x, df_7['rating_rapid'], width=bar_width, label='快棋分') plt.bar([i + bar_width for i in x], df_7['rating_blitz'], width=bar_width, label='闪电棋分') # 设置轴标签与样式 plt.xticks(x, dates.dt.strftime('%Y-%m'), rotation=45) plt.xlabel('时间') plt.ylabel('评分') plt.title('用户各类型棋类评分变化') plt.legend() plt.tight_layout() plt.show()
方案2:Seaborn 绘制(长数据格式更简洁)
Seaborn适配长格式数据,先将宽表转长表:
import seaborn as sns # 宽表转长表,统一评分类型与数值列 df_melt = df_7.melt( id_vars=['year', 'month'], value_vars=['rating_standard', 'rating_rapid', 'rating_blitz'], var_name='评分类型', value_name='评分' ) # 生成日期列用于时间排序 df_melt['date'] = pd.to_datetime(df_melt[['year', 'month']].assign(day=1)) # 绘制并列柱状图 plt.figure(figsize=(12, 6)) sns.barplot(data=df_melt, x='date', y='评分', hue='评分类型', width=0.8) plt.xticks(rotation=45) plt.xlabel('时间') plt.ylabel('评分') plt.title('用户各类型棋类评分变化') plt.tight_layout() plt.show()
注意事项
- 若时间序列存在乱序,先执行
df_7 = df_7.sort_values(by=['year', 'month'])确保数据按时间排列。 - 可根据需求调整柱子颜色、画布尺寸、刻度旋转角度等样式参数。
内容的提问来源于stack exchange,提问作者Loading
相关产品推荐
相关产品推荐

