Pour obtenir une liste qui ont 2 objets ggplot, ma fonction gscatFn2 comme ci-dessous. Au lieu d'utiliser le nom de la colonne « Semaine » de la trame de données, je veux utiliser l'index de la colonne 7 pour la cartographie esthétique comme ci-dessous. Mais message d'erreur:aes_string couleur asthetic
Error in sort.list(y) : 'x' must be atomic for 'sort.list'Have you called 'sort' on a list?
Il doit y avoir somthing mal avec ma couleur cartographie esthétique que je ne pouvais pas comprendre.
df1 <- data.frame(list(Avg=c(0.282,0.282,0.282,0.733),CV=c(0.7,1.06,0.7,0.9),Lot=c("a","b","c","d"),Model=c("m1","m2","m3","m4"),Size=c("01","02","03","04"),Month=c("11","11","22","22"),Week=c("23","23","24","24")))
df2 <- data.frame(list(Avg=c(0.010,0.02,0.029,0.083),CV=c(0.04,0.9,0.4,0.1),Lot=c("a","b","c","d"),Model=c("m1","m2","m3","m4"),Size=c("01","02","03","04"),Month=c("11","11","22","22"),Week=c("23","23","24","24")))
grp2 <- list(df1, df2)
gscatFn2 <- function(grp, ccc, ccv, cca, cccol) {
#grp: 2 data frame, ccc: Size, ccv : CV, cca : Avg, cccol : Week
#ggpplot object for each data frame shall return
library(ggplot2)
p <- list()
for (i in (1:length(grp))) {
#for each data frame repeat
#x and y
p1 <- ggplot(grp[[i]], aes_string(x=colnames(grp[[i]])[cca],y=colnames(grp[[i]])[ccv]))
#color
p2 <- p1 + geom_point(aes_string(color= colnames(factor(grp[[i]])[cccol]) )) + scale_color_manual(values= c("deepskyblue3","firebrick"))
#accumulate
p[[i]] <- p2
}
return(p)
}
# for testing
pp <- gscatFn2(grp2,5,2,1,7) # <<<- I got error "Error in sort.list(y) : 'x' must be atomic..."
print(pp[[1]])
Il fonctionne. Merci beaucoup. La chose mystérieuse est que sans ** factorisation ** le colmun, la mise en correspondance des couleurs de descrete peut être possible? – Soon
bien, oui, comme le montre l'image. Si vous êtes vraiment préoccupé qu'une variable continue peut glisser, vous pouvez utiliser 'color = paste0 ('facteur (', colnames (grp [[i]]) [cccol], ')')' – GGamba