Apparently similar code generates different results when it is abstracted in a for-loop.
This is header code common to both alternatives:
library(ggplot2)
library(gridExtra)
# factor common plot format elements
o2b <- colorRampPalette(c("brown", "orange"))(4)
textsize=8
pt <- theme(panel.grid.major=element_blank(), panel.grid.minor=element_blank(),
panel.background=element_blank(), panel.border=element_blank(),
plot.title=element_blank(), plot.margin = unit(c(5.5,12,5.5,5.5), "pt"),
legend.background=element_blank(), legend.key=element_blank(), legend.position=c(1,1),
legend.justification=c(1,1), legend.text=element_text(size=textsize), legend.title=element_text(size=textsize),
axis.line=element_line(colour="black"), axis.text=element_text(size=textsize, colour="black"),
axis.title=element_text(size=textsize))
1) This is the code without a for-loop:
# fill list of plots of 4 scatterplot rank-size distributions
p <- list()
# each plot differs by setting x values for all scatterplots to the value of x in one of the scatterplots, by turn
p[[1]] <-ggplot(temp1, aes(x=rep(rank[naics_level==2], 4), y=rhh, colour=factor(naics_level))) + pt +
geom_point(shape=1, size=1) + scale_color_manual(values=o2b) +
guides(colour = guide_legend(title="Niveau de NAICS", title.position = "left", reverse=T)) +
labs(x="Rang des MSA", y="Diversité sectorielle basée sur l'emploi en 2015")
p[[2]] <-ggplot(temp1, aes(x=rep(rank[naics_level==3], 4), y=rhh, colour=factor(naics_level))) + pt +
geom_point(shape=1, size=1) + scale_color_manual(values=o2b) +
guides(colour = guide_legend(title="Niveau de NAICS", title.position = "left", reverse=T)) +
labs(x="Rang des MSA", y="Diversité sectorielle basée sur l'emploi en 2015")
p[[3]] <-ggplot(temp1, aes(x=rep(rank[naics_level==4], 4), y=rhh, colour=factor(naics_level))) + pt +
geom_point(shape=1, size=1) + scale_color_manual(values=o2b) +
guides(colour = guide_legend(title="Niveau de NAICS", title.position = "left", reverse=T)) +
labs(x="Rang des MSA", y="Diversité sectorielle basée sur l'emploi en 2015")
p[[4]] <-ggplot(temp1, aes(x=rep(rank[naics_level==5], 4), y=rhh, colour=factor(naics_level))) + pt +
geom_point(shape=1, size=1) + scale_color_manual(values=o2b) +
guides(colour = guide_legend(title="Niveau de NAICS", title.position = "left", reverse=T)) +
labs(x="Rang des MSA", y="Diversité sectorielle basée sur l'emploi en 2015")
library(gridExtra)
grid.arrange(grobs=p, nrow=2)
which results in:
2) This is the same code in a for-loop:
p <- list()
for (n in 1:4) {
p[[n]] <- ggplot(temp1, aes(x=rep(rank[naics_level==n+1], 4), y=rhh, colour=factor(naics_level))) + pt +
geom_point(shape=1, size=1) + scale_color_manual(values=o2b) +
guides(colour = guide_legend(title="Niveau de NAICS", title.position = "left", reverse=T)) +
labs(x="Rang des MSA", y="Diversité sectorielle basée sur l'emploi en 2015")
}
grid.arrange(grobs=p, nrow=2)
which results in:
This time, all plots are duplicates of the 4th plot obtained by the first method. Where am I going wrong?