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

如何用R基于4个含Results列的DataFrame绘制堆叠条形图?

当然可以实现!R语言完全能画出你想要的堆叠条形图

你的问题核心在于先把数据整理成ggplot需要的格式——也就是每个Country和Results组合对应的计数,这样y轴就有明确的取值了。我给你一步步拆解解决方案:

步骤1:合并多个DataFrame

既然你有4个结构相同的DataFrame(都包含Results列,应该还有Country列吧?毕竟你代码里x轴用了Country),首先要把它们合并成一个统一的数据集,方便后续统计。如果需要区分不同数据源,还可以给每个数据集加个标识列:

# 先加载tidyverse包(包含ggplot2和数据处理工具dplyr)
library(tidyverse)

# 假设你的4个DataFrame叫df1、df2、df3、df4,合并时添加数据源标识
combined_df <- bind_rows(
  df1 %>% mutate(数据源 = "数据集1"),
  df2 %>% mutate(数据源 = "数据集2"),
  df3 %>% mutate(数据源 = "数据集3"),
  df4 %>% mutate(数据源 = "数据集4")
)

如果不需要区分数据源,直接用combined_df <- bind_rows(df1, df2, df3, df4)就行

步骤2:统计各类结果的计数

接下来要统计每个国家的Wins、Draws、Losses分别有多少次,这是y轴需要的数值:

# 用count函数快速统计,name参数指定计数列的名字为Count
summary_df <- combined_df %>%
  count(Country, Results, name = "Count")

如果你之前尝试过table(),也可以这么转成数据框:

counts <- table(combined_df$Country, combined_df$Results)
summary_df <- as.data.frame(counts) %>%
  rename(Country = Var1, Results = Var2, Count = Freq)

步骤3:绘制堆叠条形图

现在数据格式正确了,直接用ggplot绘图就行,y轴就是我们统计出来的Count:

ggplot(summary_df, aes(x = Country, y = Count, fill = Results)) +
  geom_bar(stat = "identity") +  # stat="identity"表示直接用y轴的数值绘制
  # 可以加一些美化标签
  labs(
    title = "各国比赛结果统计",
    x = "国家",
    y = "次数",
    fill = "比赛结果"
  ) +
  theme_minimal()  # 用简洁的主题,也可以换其他主题比如theme_bw()

这样就能得到你想要的堆叠条形图啦——每个国家的条形会按Wins、Draws、Losses堆叠,高度就是对应结果的总次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:01