汇总用于ggplot2的图形的数据帧

use*_*249 2 r ggplot2 dataframe

我有以下数据框。它详细说明了4种不同支出方案的年成本,每种方案为三年。

mydf2 = data.frame( Scenario = c(1,1,1,2,2,2,3,3,3,4,4,4), Year= c(1,2,3,1,2,3,1,2,3,1,2,3), 
Cost = c(140,445,847,948,847,143,554,30,44,554,89,45))
Run Code Online (Sandbox Code Playgroud)

我希望能够绘制出我所拥有的所有方案的年度总成本:

library(ggplot2)
ggplot(mydf2, aes(x = Year, y= Cost))+ geom_line(stat="identity")
Run Code Online (Sandbox Code Playgroud)

但它会产生以下可怕的图形:

在此处输入图片说明

当我按年份汇总数据时,它可以工作,但是我不知道如何在R中执行此操作。我必须回到Excel。如何按年份汇总数据框架,以便将其制成图表?新框架将如下所示:

 Year   Total Cost
  1      2196
  2      1411
  3      1079
Run Code Online (Sandbox Code Playgroud)

但是我必须再次回到Excel来执行此操作。我也不知道为什么这些垂直线仍然存在。我是R的新手,非常感谢。

tal*_*lat 5

ggplot的方法是:

ggplot(mydf2, aes(x = Year, y= Cost)) + stat_summary(fun.y = sum, geom = "line")
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用dplyr汇总数据并将其“管道”到ggplot中。

library(dplyr); library(ggplot2)
mydf2 %>% group_by(Year) %>% summarise(Cost = sum(Cost)) %>% 
   ggplot(., aes(x = Year, y = Cost)) + geom_line(stat = "identity")
Run Code Online (Sandbox Code Playgroud)

.内部ggplot是通过与管道中传递的数据%>%

如果要为每种情况绘制一个图,则可以使用facet_wrap例如。我不在stat_summary这里使用,因为每个方案每年只有1个条目,即无需汇总:

ggplot(mydf2, aes(x = Year, y= Cost)) + 
   geom_line(stat = "identity") + 
   facet_wrap( ~ Scenario)
Run Code Online (Sandbox Code Playgroud)

如果要用单独的线但在同一图中绘制每个方案,则可以执行以下操作:

ggplot(mydf2, aes(x = Year, y= Cost, color = factor(Scenario))) + 
    geom_line(stat = "identity")
Run Code Online (Sandbox Code Playgroud)