Comme vos points de données sont répartis partout dans le monde, il peut être difficile de distinguer les points sur la carte lorsque vous tracez tout dans une carte. Comme alternative, vous pouvez créer une intrigue à facettes avec un gros plan pour plusieurs parties du monde.Je propose les étapes suivantes:
1: lire les données et assurez-vous qu'ils ont la bonne classe:
coordinates <- read.csv2("seqmap.csv", header=T, fill=T,
col.names=c("ID.CODE", "latitude", "longitude", "sample.nature", "seq.methods"),
row.names=NULL)
coordinates$latitude <- as.numeric(as.character(coordinates$latitude))
coordinates$longitude <- as.numeric(as.character(coordinates$longitude))
2: charge les bibliothèques nécessaires:
library(ggplot2)
library(ggmap)
library(grid)
library(gridExtra)
3: Créez des groupes de points et attribuez des valeurs de cluster aux points:
km <- kmeans(coordinates[,c("longitude","latitude")], centers = 6)
coordinates$cluster <- km$cluster
4: Obtenez les cartes pour les différents groupes:
> km$centers
longitude latitude
1 -156.7000 71.37000
2 -88.3875 28.82875
3 -39.0700 -17.65200
4 139.3400 35.88667
5 94.4150 -67.29500
6 -64.5000 32.17000
map1 <- get_map(location = c(lon = -156.7, lat = 71.37), zoom = 7)
map2 <- get_map(location = c(lon = -88.3875, lat = 28.82875), zoom = 9)
map3 <- get_map(location = c(lon = -39.07, lat = -17.652), zoom = 9)
map4 <- get_map(location = c(lon = 139.34, lat = 35.88667), zoom = 8)
map5 <- get_map(location = c(lon = 94.415, lat = -67.295), zoom = 4)
map6 <- get_map(location = c(lon = -64.5, lat = 32.17), zoom = 10)
5: Créer les cartes et les stocker sous forme d'objets:
p1 <- ggmap(map1) +
geom_point(data=coordinates[coordinates$cluster==1,], aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods), size=3) +
scale_shape_manual(values=c("sediment"=21,"water"=22)) +
scale_fill_manual(values=c("Illumina"="red")) +
guides(shape=FALSE, fill=FALSE) +
ggtitle("Alaska")
p2 <- ggmap(map2) +
geom_point(data=coordinates[coordinates$cluster==2,], aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods), size=3) +
scale_shape_manual(values=c("sediment"=21,"water"=22)) +
scale_fill_manual(values=c("Illumina"="red","ion torrent"="green")) +
guides(shape=FALSE, fill=FALSE) +
ggtitle("New Orleans")
p3 <- ggmap(map3) +
geom_point(data=coordinates[coordinates$cluster==3,], aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods), size=3) +
scale_shape_manual(values=c("water"=22)) +
scale_fill_manual(values=c("454"="blue")) +
guides(shape=FALSE, fill=FALSE) +
ggtitle("Brazil")
p4 <- ggmap(map4) +
geom_point(data=coordinates[coordinates$cluster==4,], aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods), size=3) +
scale_shape_manual(values=c("sediment"=21)) +
scale_fill_manual(values=c("454"="blue")) +
guides(shape=FALSE, fill=FALSE) +
ggtitle("Japan")
p5 <- ggmap(map5) +
geom_point(data=coordinates[coordinates$cluster==5,], aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods), size=3) +
scale_shape_manual(values=c("water"=22)) +
scale_fill_manual(values=c("Sanger"="yellow")) +
guides(shape=FALSE, fill=FALSE) +
ggtitle("Antartica")
p6 <- ggmap(map6) +
geom_point(data=coordinates[coordinates$cluster==6,], aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods), size=3) +
scale_shape_manual(values=c("water"=22)) +
scale_fill_manual(values=c("454"="blue","Illumina"="red")) +
guides(shape=FALSE, fill=FALSE) +
ggtitle("Bermuda")
6: Créer une légende séparée:
p0 <- ggplot(data=coordinates, aes(x=longitude, y=latitude, shape=sample.nature, fill=seq.methods, color=seq.methods)) +
geom_point(size=4) +
scale_shape_manual("Sample:",values=c("sediment"=21,"water"=22)) +
scale_fill_manual("Method:",values=c("454"="blue","Illumina"="red","ion torrent"="green","Sanger"="yellow")) +
scale_color_manual("Method:",values=c("454"="blue","Illumina"="red","ion torrent"="green","Sanger"="yellow")) +
theme(legend.key=element_rect(fill=NA))
# function to extract the legend (borrowed from: https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs)
g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)}
legend <- g_legend(p0)
lwidth <- sum(legend$width)
7: Créer le tracé final avec:
grid.arrange(arrangeGrob(p1, p2, p3, p4, p5, p6, ncol=2),
legend, widths=unit.c(unit(1, "npc") - lwidth, lwidth), nrow=1)
qui donne le résultat suivant:
Salut lukeA, je vous remercie de l'aide! Je ne peux pas entièrement comprendre la deuxième partie, avec (coordonnées, points (x = longitude, y = latitude, cex = .5, # réduire la taille du symbole un bit col = adjustcolor (c ("Illumina" = "red "," 454 "=" bleu "," ion torrent "=" vert "," Sanger "=" jaune ") [en tant que caractère (seq.méthodes)], alpha.f = 0,5), pch = c ("sédiment" = 15, "eau" = 19) [en tant que caractère (échantillon.nature)] ) ) dev.off() shell.exec (pdffile) # ouvrir pdf doc sur les fenêtres à agrandir/agrandir facilement ... Il me montre juste la carte du monde en format pdf (<- bonne idée!), mais les points ne sont pas tracés ... Où je me trompe? – Plumeria
Les points devraient être là, mais très minuscule. Peut-être remettre 'cex' à' cex = 1' (ou plus grand) et/ou réduire les dimensions du document dans 'width' et' height', pour le rapprocher davantage? Ou ai-je fait une erreur? – lukeA
Non, je l'ai réécrit et ça marche ici. Comme je l'ai dit, vous devrez peut-être jouer avec 'width',' height', 'cex' et aussi' alpha.f', qui contrôle la transparence des points (1 = solide, 0 = transparent). En outre, il semble mieux avec 'resolution =" high "'. :) – lukeA