在ggplot2中创建用于绘图的循环会导致错误

时间:2018-11-10 13:57:41

标签: r loops ggplot2

以前曾以类似的方式发布过此消息,但我现在已经调整了一些内容,希望(!)现在已经清楚了

我试图创建一个循环以便为多个国家/地区创建地块。

我的数据框:Plot_df

以下是数据摘录:

year country iso2      sector emissions
1990 Belgium   BE         ETS         0
1990 Belgium   BE   Regulated  78614107
1990 Belgium   BE Unregulated  41870292
1991 Belgium   BE         ETS         0
1991 Belgium   BE   Regulated  79811521
1991 Belgium   BE Unregulated  43733190
...
2011 Belgium   BE         ETS  46203056
2011 Belgium   BE   Regulated  61319344
2011 Belgium   BE Unregulated  42839297
2012 Belgium   BE         ETS  43006980
2012 Belgium   BE   Regulated  58934979
2012 Belgium   BE Unregulated  42459997
2013 Belgium   BE         ETS  45231176
2013 Belgium   BE   Regulated  58383554
2013 Belgium   BE Unregulated  43586891
2014 Belgium   BE         ETS  43853144
2014 Belgium   BE   Regulated  56010346
2014 Belgium   BE Unregulated  40380694
2015 Belgium   BE         ETS  44713916
2015 Belgium   BE   Regulated  57375031
2015 Belgium   BE Unregulated  42854461
2016 Belgium   BE         ETS  43655728
2016 Belgium   BE   Regulated  56702848
2016 Belgium   BE Unregulated  43540863

dput(head(Plot_df, 15))提供了此功能

structure(list(year = c("1990", "1990", "1990", "1990", "1990", 
"1990", "1990", "1990", "1990", "1990", "1990", "1990", "1990", 
"1990", "1990"), country = c("Austria", "Austria", "Austria", 
"Belgium", "Belgium", "Belgium", "Bulgaria", "Bulgaria", "Bulgaria", 
"Croatia", "Croatia", "Croatia", "Cyprus", "Cyprus", "Cyprus"
), iso2 = c("AT", "AT", "AT", "BE", "BE", "BE", "BG", "BG", "BG", 
"HR", "HR", "HR", "CY", "CY", "CY"), sector = c("ETS", "Regulated", 
"Unregulated", "ETS", "Regulated", "Unregulated", "ETS", "Regulated", 
"Unregulated", "ETS", "Regulated", "Unregulated", "ETS", "Regulated", 
"Unregulated"), emissions = c(0, 38264402.6689529, 24027827.7997971, 
0, 78614106.9221497, 41870291.5153503, 0, 69103153.6445618,         
9569791.66793823, 
0, 17530229.1374207, 5911735.70632935, 0, 3135556.17528036, 1507499.48878214
)), row.names = c("378", "2836", "3100", "813", "8310", "8410", 
"558", "16410", "16510", "438", "24510", "24610", "783", "3261", 
"3271"), class = "data.frame")

我只显示了一个国家/地区的全部数据,因为每个国家/地区看起来都一样(除了不同的数字Plot_df$emissions

我想做的是(大多数您将从下面的代码中看到):

  • 创建循环,因此将为所有国家/地区创建地块
  • x轴=年; y =(Plot_df$country中某个国家/地区的排放)
  • 3个组(曲线)应来自“ Plot_df $ sector”:受监管,不受监管,ETS 受管制和不受管制应在1990:2016之间; 2005:2017之间的ETS。 (这些年份是具有数据可用性的年份)

这是我尝试过的:

# Sets up the loop to run from i=1 through a list of countries from vector 
`Plot_df$country`
for(i in (1:length(unique(Plot_df$country)))){

# Color settings: colorblind-friendly palette
cols <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", 
        "#D55E00", "#CC79A7")

# Plotting code where DATA, YEAR, etc need to be handed the right vectors
p <- ggplot() +
geom_line(Plot_df,aes(x=year,y=emissions,group=sector),
          color=cols[1]) +
labs(x="Year",y="CO2 emissions",z="",title=paste("Emissions for", 
country[i])) + 
xlim(1990, 2016) +
ylim(-50,50) +
theme(plot.margin=unit(c(.5,.5,.5,.5),"cm"))
p

# Save plot, where the file name automatically gets a country name suffix
 ggsave(p,filename=paste("./FILENAME",country[i],".png",sep=""),width=6.5, 
     height=6)
}

我遇到此错误,我不知道为什么

Error: `data` must be a data frame, or other object coercible by 
`fortify()`, not an S3 object with class uneval
Did you accidentally pass `aes()` to the `data` argument?

知道为什么会这样吗?

无论如何都要感谢

1 个答案:

答案 0 :(得分:2)

FWIW代码样式花了很长的一段路。

{{1}}