2017-09-12 2 views
3

J'essaie de tracer des points sur une carte du Royaume-Uni, où la taille des points change en fonction des données.Erreur lors de la tentative de tracer des points sur une carte

Voici une partie de mon fichier de données (c'est la première fois que je fais un exemple reproductible - J'ai utilisé dput en tête du fichier mais faites moi savoir s'il y a un moyen de le faire plus clairement ou mieux).

structure(list(V1 = c("St George's", "Sheffield", "Plymouth", 
"Exeter", "King's College London", "East Anglia"), 
Sample = c(183L, 139L, 106L, 128L, 152L, 178L), 
Total = c(417L, 342L, 350L, 520L, 659L, 875L), 
Response = c(43.9, 40.6, 30.3, 24.6, 23.1, 20.3), 
Lat = c(51.427194, 53.380941, 50.415735, 50.737137, 51.511486, 52.621921), 
Long = c(-0.174503, -1.487947, -4.110571, -3.535147, -0.115997, 1.239176)), 
.Names = c("V1", "Sample", "Total", "Response", "Lat", "Long"), 
row.names = c(NA, 6L), class = "data.frame") 

Une fois que j'ai le fichier de données chargé, je fais ceci:

UK <- map_data(map = "world", region = "UK") 

ggplot(data = UK, aes(x = long, y = lat, group = group)) + 
    geom_polygon() + 
    geom_point(data = unidata, aes(x = Long, y = Lat, size = Response, col = "red")) + 
    coord_map() 

Cependant, cela me fait l'erreur suivante:

Error in eval(expr, envir, enclos) : object 'group' not found

Il y a un groupe au Royaume-Uni données, et quand j'exécute ce code sans la ligne geom_point, j'obtiens une carte standard du Royaume-Uni, donc je suppose que l'erreur est dans cette ligne. Cependant, il ne semble pas que geom_point nécessite un groupe. Donc je dois oublier quelque chose?

Répondre

2

Cela fonctionne lorsque vous déplacez les arguments décrivant les données et les colonnes à utiliser pour l'élément geom_polygon(). L'exécution du code ci-dessous, vous obtenez la parcelle désirée:

ggplot() + 
    geom_polygon(data = UK, aes(x = long, y = lat, group = group)) + 
    geom_point(data = unidata, aes(x = Long, y = Lat, size = Response), col = "red") + 
    coord_map() 

J'ai aussi déplacé l'argument col = "red" en dehors des parenthèses aes() il ne se présente pas dans votre légende.

+0

Merci, c'est parfait! Par intérêt, savez-vous pourquoi c'est le cas? Est-ce parce que, une fois que vous avez ajouté l'élément geom_point (à partir d'un ensemble de données différent), le géom_polygon a besoin de plus de définition, car ce qu'il doit faire n'est pas aussi clair? – Megan

+0

Je lisais [ce post] (http://r.789695.n4.nabble.com/Plotting-from-different-data-sources-on-the-same-plot-with-ggplot2-td835473.html) que a quelques commentaires par Hadley Wickham (qui a écrit ggplot2) sur le problème, et sa solution implique d'avoir des noms communs pour les variables x et y dans les deux dataframes. Expansion à ce sujet, je suis venu à cette solution. Il semble que les mappages que vous définissez dans la fonction 'ggplot()' s'appliquent à tous les éléments visuels, et comme l'image unidata n'a pas de colonne de groupe, l'erreur apparaît. –

+0

Cela a du sens, et très utile car je suis sûr que j'ai eu des problèmes similaires dans le passé. Merci. – Megan