Python多折线图绘制:如何从DataFrame获取事件类型年度频次数据
实现年度事件类型多折线图的步骤
第一步:数据预处理
假设你用Python的pandas处理数据,步骤如下:
- 导入依赖库并读取数据集:
import pandas as pd # 替换成你的数据集路径(如CSV/Excel文件) df = pd.read_csv("your_dataset.csv")
- 提取目标列并清洗数据:
# 仅保留YEAR和EVENT_TYPE两列 df_filtered = df[["YEAR", "EVENT_TYPE"]] # 确保年份为数值类型,避免绘图时排序混乱 df_filtered["YEAR"] = pd.to_numeric(df_filtered["YEAR"], errors="coerce") # 移除年份或事件类型为空的无效行 df_filtered = df_filtered.dropna(subset=["YEAR", "EVENT_TYPE"])
- 统计每年各事件类型的发生次数:
# 用透视表生成「年份-事件类型-次数」的结构化数据 event_year_count = df_filtered.pivot_table( index="YEAR", columns="EVENT_TYPE", aggfunc="size", fill_value=0 # 某年份无该事件时填充0 ) # 按年份排序,保证X轴顺序正确 event_year_count = event_year_count.sort_index()
第二步:绘制多折线图
方法一:用Matplotlib手动绘制
import matplotlib.pyplot as plt # 设置画布大小 plt.figure(figsize=(12, 6)) # 遍历每个事件类型,绘制对应折线 for event_type in event_year_count.columns: plt.plot( event_year_count.index, event_year_count[event_type], marker="o", # 可选:添加数据点标记增强可读性 label=event_type ) # 添加图表元素 plt.title("各事件类型年度发生次数趋势", fontsize=14) plt.xlabel("年份", fontsize=12) plt.ylabel("发生次数", fontsize=12) plt.legend(title="事件类型", bbox_to_anchor=(1.05, 1), loc="upper left") # 图例放在右侧避免遮挡 plt.grid(alpha=0.3) # 添加浅色网格线 plt.tight_layout() # 自动调整布局防止元素重叠 # 显示或保存图表 plt.show() # plt.savefig("event_trend.png", dpi=300) # 如需保存高清图可启用此行
方法二:用Seaborn简化绘制(更简洁)
Seaborn需要先将数据转成长格式:
import seaborn as sns # 将宽格式数据转为长格式 long_df = event_year_count.reset_index().melt( id_vars="YEAR", var_name="EVENT_TYPE", value_name="COUNT" ) # 绘制多折线图 plt.figure(figsize=(12, 6)) sns.lineplot( data=long_df, x="YEAR", y="COUNT", hue="EVENT_TYPE", marker="o" ) # 添加图表元素 plt.title("各事件类型年度发生次数趋势", fontsize=14) plt.xlabel("年份", fontsize=12) plt.ylabel("发生次数", fontsize=12) plt.legend(title="事件类型", bbox_to_anchor=(1.05, 1), loc="upper left") plt.grid(alpha=0.3) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Malhar
相关产品推荐
相关产品推荐

