在ggplot2中汇总用于绘图的数据框

时间:2014-12-22 16:20:20

标签: r ggplot2 dataframe

我有以下数据框。它详细介绍了4种不同支出情景的年度成本,每种情景均为3年。

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))

我希望能够绘制我所有场景的年度总费用:

library(ggplot2)
ggplot(mydf2, aes(x = Year, y= Cost))+ geom_line(stat="identity")

但它产生了这张糟糕的图表:

enter image description here

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

 Year   Total Cost
  1      2196
  2      1411
  3      1079

但我又要回到Excel去做了。我不知道为什么这些垂直线也会持续存在。我是R的新人,非常感谢。

1 个答案:

答案 0 :(得分:5)

ggplot的方法是:

ggplot(mydf2, aes(x = Year, y= Cost)) + stat_summary(fun.y = sum, geom = "line")

另一个选择是使用dplyr汇总数据并将其“管道”直接输入ggplot。

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

ggplot中的.是使用%>%传递给管道的数据。

如果您想为每个方案制作一个绘图,可以使用facet_wrap作为示例。我不在这里使用stat_summary,因为每个场景每年只有1个条目,即不需要聚合:

ggplot(mydf2, aes(x = Year, y= Cost)) + 
   geom_line(stat = "identity") + 
   facet_wrap( ~ Scenario)

如果您想使用单独的行绘制每个场景但在同一个图中,您可以执行以下操作:

ggplot(mydf2, aes(x = Year, y= Cost, color = factor(Scenario))) + 
    geom_line(stat = "identity")