You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在长时间序列中绘制同一列中的多变量?以及如何基于双列数据绘制按年份统计的灾害类型数量堆叠柱状图

解决灾害数据堆叠柱状图的需求

嘿,这问题我熟!咱们一步步来搞定:

核心问题解答

1. 无需手动拆分数据成多列!

完全不用把不同灾害类型拆成单独列来绘图,用Python的pandas就能直接从你现有的长格式数据(一列灾害类型、一列年份)生成适合堆叠柱状图的统计结果,全程代码自动处理,省掉手动整理的麻烦。

2. 按年份统计各灾害类型数量的方法

这是绘图的前置关键步骤,用pandas的分组统计就能轻松实现。我用你提供的样本数据写个具体示例:

import pandas as pd
import matplotlib.pyplot as plt

# 把你的样本数据转换成DataFrame格式
data = {
    'inctype': ['Tornado', 'Tornado', 'Flood', 'Tornado', 'Flood', 'Tornado', 'Tornado', 'Flood', 'Flood', 'Fire', 'Flood', 'Other', 'Tornado', 'Flood', 'Tornado', 'Flood', 'Flood', 'Earthquake', 'Flood', 'Flood', 'Hurricane', 'Hurricane', 'Hurricane', 'Hurricane', 'Hurricane', 'Flood', 'Hurricane', 'Hurricane', 'Flood', 'Other', 'Volcano', 'Flood', 'Tornado'],
    'decdate': [1953]*13 + [1954]*17 + [1955]*3
}
df = pd.DataFrame(data)

# 按年份+灾害类型统计数量,自动转成宽格式(年份为行,灾害类型为列)
disaster_counts = df.groupby(['decdate', 'inctype']).size().unstack(fill_value=0)

运行后,disaster_counts会生成一个规整的统计表格:每行对应一个年份,每列对应一种灾害,单元格里是该年份该灾害的发生次数,缺省的灾害类型会自动填充0,完美适配堆叠柱状图的需求。

绘制堆叠柱状图

有了统计好的数据,绘图就很简单了,用pandas自带的绘图功能就能直接生成:

# 绘制堆叠柱状图
disaster_counts.plot(kind='bar', stacked=True, figsize=(12, 6))

# 美化图表细节
plt.title('Annual Disaster Counts by Type (1953-1955)')
plt.xlabel('Year')
plt.ylabel('Number of Disasters')
# 把图例放到图表外侧,避免遮挡数据
plt.legend(title='Disaster Type', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()

这段代码会生成一个堆叠柱状图:每个柱子代表一年,柱子的不同颜色对应不同灾害类型,高度就是该类型的发生数量,所有类型堆叠起来就是当年的总灾害数。

如果你想用seaborn、plotly等其他绘图库,也可以用同样的统计结果来实现,核心逻辑都是先通过分组统计得到宽格式数据,全程不需要手动拆分原数据。

内容的提问来源于stack exchange,提问作者kksweene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:57:38