2017-07-18 2 views
1

Hallo Visualisierung Liebhaber,erstellen eine Karte mit der angepassten Größe von Staaten

Ich versuche, eine Farbkarte Handlung, wie diese zu erstellen: like this one (Quelle: https://github.com/hrbrmstr/albersusa)

ABER ich will dies ist so zu verstehen, dass die Werte so voreingenommen sind, dass die Bereiche der Zustände proportional zu dem Wert sind, den ich bereitstelle (insbesondere nutze ich den GPD-Wert). Was ich meine ist, dass ich einige Staaten größer aussehen möchte, einige kleiner, dass sie in Wirklichkeit sind, aber die echte USA Karte so viel wie möglich erinnern. Keine Probleme mit den Zuständen, die sich bewegen oder die Form zerstören.

Irgendwelche Ideen? Irgendwelche fertigen Lösungen? Derzeit verwende ich R und Albersusa-Paket, weil es mir etwas bekannt ist. Offen für Veränderungen! Mein aktueller Code für das Grundstück ist:

  gmap<- 
      ggplot() + 
      geom_map(data = [email protected], map = cmap, 
        aes(fill =atan(y/x),alpha=x+y, map_id = name), 
        color = "gray50") + 
      geom_map(data = smap, map = smap, 
        aes(x = long, y = lat, map_id = id), 
        color = "black", size = .5, fill = NA) + 
      theme_map(base_size = 12) + 
      theme(plot.title=element_text(size = 16, face="bold",margin=margin(b=10))) + 
      theme(plot.subtitle=element_text(size = 14, margin=margin(b=-20))) + 
      theme(plot.caption=element_text(size = 9, margin=margin(t=-15),hjust=0)) + 
scale_fill_viridis()+guides(alpha=F,fill=F) 
+0

Sie könnten versuchen, ein Kartogramm zu erstellen? Siehe [hier] (https://stackoverflow.com/questions/9319597/cartogram-choropleth-map-in-r). – Axeman

Antwort

1

Hier ist ein sehr hässlicher erster Versuch Dich zu erhalten begonnen, die Umrisse von dem maps Paket und einiger Datenmanipulation von dplyr verwenden.

library(maps) 
library(dplyr) 
library(ggplot2) 

# Generate the base outlines 
mapbase <- map_data("state.vbm")  

# Load the centroids 
data(state.vbm.center) 

# Coerce the list to a dataframe, then add in state names 
# Then generate some random value (or your variable of interest, like population) 
# Then rescale that value to the range 0.25 to 0.95 

df <- state.vbm.center %>% as.data.frame() %>% 
    mutate(region = unique(mapbase$region), 
     somevalue = rnorm(50), 
     scaling = scales::rescale(somevalue, to = c(0.25, 0.95))) 
df 

# Join your centers and data to the full state outlines 
df2 <- df %>% 
    full_join(mapbase) 
df2 

# Within each state, scale the long and lat points to be closer 
# to the centroid by the scaling factor 

df3 <- df2 %>% 
    group_by(region) %>% 
    mutate(longscale = scaling*(long - x) + x, 
     latscale = scaling*(lat - y) + y) 
df3 

# Plot both the outlines for reference and the rescaled polygons 

    ggplot(df3, aes(long, lat, group = region, fill = somevalue)) + 
    geom_path() + 
    geom_polygon(aes(longscale, latscale)) + 
    coord_fixed() + 
    theme_void() + 
    scale_fill_viridis() 

enter image description here

Diese Konturen sind nicht die besten, und die Schwerpunktpositionen sie auf Grund schrumpfen die Polygone manchmal den ursprünglichen Zustand Umriss überlappen. Aber es ist ein Anfang; Sie können bessere Formen für US-Bundesstaaten und verschiedene Schwerpunktalgorithmen finden.

+0

Ow wow! Vielen Dank! –

Verwandte Themen