R语言中如何使用ggplot无需重构数据框绘制多列数据?
我们以绘制你需求中的分年份多灾害类型堆叠柱状图为例,不需要对原宽表结构做重构操作,直接基于现有列即可实现绘制,以下是不同工具的实现方案:
Python 实现(基于pandas+matplotlib)
首先导入依赖:
import pandas as pd import matplotlib.pyplot as plt
假设你的原始数据框命名为df,直接指定需要堆叠的数值列即可绘图:
# 定义需要展示的灾害类型列 disaster_cols = ["Conflict", "Epidemics", "Famine", "Natural Disaster", "Other"] # 以Year为X轴绘制堆叠柱状图,也可根据需要替换为Country列 df.plot( x="Year", y=disaster_cols, kind="bar", stacked=True, figsize=(12, 6) ) # 补充图表配置 plt.xlabel("年份") plt.ylabel("事件数量/影响人数") plt.title("不同年份各类灾害情况统计") plt.legend(title="灾害类型") plt.tight_layout() plt.show()
如果需要按国家维度聚合绘图,仅需做简单聚合即可,无需重构表结构:
# 按国家聚合各类灾害的累计值 country_stat = df.groupby("Country")[disaster_cols].sum().reset_index() country_stat.plot(x="Country", y=disaster_cols, kind="bar", stacked=True)
你也可以修改kind参数实现其他图表类型:
- 替换为
area可绘制堆叠面积图 - 替换为
barh可绘制横向堆叠柱状图
R 实现(基于ggplot2)
同样不需要转换表结构,直接逐层调用各列绘制即可:
library(ggplot2) ggplot(df, aes(x = Year)) + geom_col(aes(y = Conflict, fill = "Conflict")) + geom_col(aes(y = Epidemics, fill = "Epidemics")) + geom_col(aes(y = Famine, fill = "Famine")) + geom_col(aes(y = `Natural Disaster`, fill = "Natural Disaster")) + geom_col(aes(y = Other, fill = "Other")) + labs( x = "年份", y = "统计值", fill = "灾害类型", title = "不同年份各类灾害情况统计" )
内容的提问来源于stack exchange,提问作者KOULY
相关产品推荐
相关产品推荐

