2 Stimmen

Ggmap Visualisierung von Daten mit Kreisen auf der Karte

Ich versuche, eine Karte zu erstellen, die in Kreisen die Städte zeigt, aus denen die Personen in meinem Datensatz stammen. Ich möchte, dass die Kreise proportional zur Anzahl der Personen in der jeweiligen Stadt in meinem Datensatz sind. Außerdem möchte ich einen zusätzlichen Kreis haben, der eine Teilmenge des ursprünglichen Kreises zeigt, der die von der Krankheit betroffenen Personen in jeder Stadt zeigt.

Ich habe damit begonnen, dies mit ggmap zu tun, indem ich Längen- und Breitengrade erhalte:

library(ggplot2)
library(maps)
library(ggmap)
geocode("True Blue, Grenada")

Ich stecke fest, weil ich nicht weiß, wie ich fortfahren soll. Ich kann die US-Karte alleine nicht laden, da sich ein Ort in der Karibik befindet.

Hier sind meine Daten im Kurzformat, der tatsächliche Datensatz ist viel zu groß.

subjectid   location            disease
12          Atlanta, GA         yes
15          Boston, MA          no
13          True Blue, Grenada  yes
85          True Blue, Grenada  yes
46          Atlanta, GA         yes
569         Boston, MA          yes
825         True Blue, Grenada  yes
685         Atlanta, GA         no
54          True Blue, Grenada  no
214         Atlanta, GA         no
685         Boston, MA          no
125         True Blue, Grenada  yes
569         Boston, MA          no

Kann mir bitte jemand helfen?

1voto

Sandy Muspratt Punkte 30889

Dies sollte Sie zum Starten bringen. Es zeichnet keine Kreise innerhalb von Kreisen. ggplot kann so konfiguriert werden, dass verschiedene Variablen demselben ästhetischen Merkmal (Größe) zugeordnet werden, jedoch mit Schwierigkeiten. Hier repräsentiert die Größe des Punktes die Gesamtzahl, und die Farbe des Punktes repräsentiert die Anzahl der Erkrankten. Sie müssen die Größen-Skala für Ihren vollständigen Datensatz anpassen.

Der folgende Code ermittelt die geografischen Standorte der Städte und fügt sie dann wieder in die Datendateien ein. Anschließend fasst er die Daten zusammen, um einen Datenrahmen mit den erforderlichen Zählungen zu erstellen. Die Karte wird mit Grenzen gezeichnet, die durch den maximalen und minimalen Längen- und Breitengrad der Städte festgelegt sind. Der letzte Schritt besteht darin, die Städte und die Zählungen auf der Karte zu plotten.

# Bibliotheken laden
library(ggplot2)
library(maps)
library(ggmap)
library(grid)
library(plyr)

# Ihre Daten
df <- read.table(header = TRUE, text = "
subjectid   location           disease
12          'Atlanta, GA'         ja
15          'Boston, MA'          nein
13          'True Blue, Grenada'  ja
85          'True Blue, Grenada'  ja
46          'Atlanta, GA'         ja
569         'Boston, MA'          ja
825         'True Blue, Grenada'  ja
685         'Atlanta, GA'         nein
54          'True Blue, Grenada'  nein
214         'Atlanta, GA'         nein
685         'Boston, MA'          nein
125         'True Blue, Grenada'  ja
569         'Boston, MA'          nein", stringsAsFactors = FALSE)

# Geografische Standorte abrufen und in die Datendatei fusionieren
geoloc <- geocode(unique(df$location))
pos <- data.frame(location = unique(df$location), geoloc, stringsAsFactors = FALSE)
df <- merge(df, pos, by = "location", all = TRUE)

# Datenrahmen zusammenfassen
df = ddply(df, .(location, lon, lat), summarise, 
   countDisease = sum(ifelse(disease == "ja", 1, 0)),
   countTotal = length(location))

# Karte plotten
mp1 <- fortify(map(fill = TRUE, plot = FALSE))

xmin <- min(df$lon) - 5
xmax <- max(df$lon) + 7
ymin <- min(df$lat) - 5
ymax <- max(df$lat) + 5

Amap <- ggplot() + 
  geom_polygon(aes(x = long, y = lat, group = group), data = mp1, fill = "grey", colour = "grey") + 
  coord_cartesian(xlim = c(xmin, xmax), ylim = c(ymin, ymax)) + 
  theme_bw()

# Städte und Zählungen plotten
Amap <- Amap + geom_point(data = df, aes(x = lon, y = lat, size = countTotal, colour = countDisease)) +
    geom_text(data = df, aes(x = lon, y = lat, label = gsub(",.*$", "", location)), size = 2.5,  hjust = -.3) +
    scale_size(range = c(3, 10)) +
    scale_colour_continuous(low = "blau", high = "rot", space = "Lab")

Bildbeschreibung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X