如何用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
相关产品推荐
相关产品推荐

