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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:45:00