2016-05-11 6 views
2

würde Ich mag eine Choroplethenkarte schaffen 2 Abmasswerte Visualisierung (= Farbe der Polygone gemäß einem geordneten Paar (v1, v2) füllen, wo v1 und v2 Faktoren geordnet) . HierErstellen eines choropleth (Polygon) Karte mit 2-dimensionalen Werten ggplot

ist ein Beispiel dafür, wie das Ergebnis aussehen soll: enter image description here

Ich denke, die Farbmatrix-Legende mit den zwei Dimensionen macht deutlich, was ich erreichen will.

Ich möchte dies unter Verwendung ggplot2::geom_polygon implementieren.


Minimal Beispiel:

ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) 

values <- data.frame(
    id = ids, 
    v1 = factor(c("Hi","Med","Med","Hi","Lo","Lo"), 
       levels=c("Lo", "Med", "Hi"), ordered=TRUE), 
    v2 = factor(c("Hi","Lo","Lo","Med","Med","Hi"), 
       levels=c("Lo", "Med", "Hi"), ordered=TRUE)) 

positions <- data.frame(
    id = rep(ids, each = 4), 
    x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 
     0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), 
    y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 
     2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2)) 

datapoly <- merge(values, positions, by=c("id")) 

Ich mag würde die beiden folgenden Karten in nur einer nach dem Beispiel oben kombinieren. Die Farbfüllung der Polgons sollte nach dem bestellten Paar (v1, v2) sein und natürlich würde ich eine Farbmatrix-Legende benötigen.

library("ggplot2") 
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v1, group=id)) 
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v2, group=id)) 

enter image description here

+0

Ich fragte eine ähnliche Frage vor einer Weile - konzentrierte sich nur auf die 2-dimensionale Legende Idee: http://StackOverflow.com/Q/20129299/903061 – Gregor

Antwort

-1

Wie wäre es interaction(v1, v2) und eine einzige Skala auf der resultierende Interaktion abbilden?

# using your inputs 
values$v1_2 <- interaction(values$v1, values$v2) 
... 
datapoly <- merge(values, positions, by=c("id")) 

library(ggplot2) 
library(scales) 
library(RColorBrewer) 
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v1_2, group=id)) + 
    scale_fill_brewer(palette= "Blues") 

enter image description here

Oder die Lösung verwenden @gregor oben in den Kommentaren verknüpft.

+0

mh, ich möchte wirklich eine Matrix-Legende haben und nicht a single scale ... Der Link @gregor, der oben gepostet wurde, geht definitiv in die richtige Richtung ... –

Verwandte Themen