以前曾以类似的方式发布过此消息,但我现在已经调整了一些内容,希望(!)现在已经清楚了
我试图创建一个循环以便为多个国家/地区创建地块。
我的数据框: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
)
我想做的是(大多数您将从下面的代码中看到):
Plot_df$country
中某个国家/地区的排放)这是我尝试过的:
# 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?
知道为什么会这样吗?
无论如何都要感谢
答案 0 :(得分:2)
FWIW代码样式花了很长的一段路。
{{1}}