2016-08-24 6 views
1

Ich habe diesen Datenrahmen regional genannt:ploting richtige Farben mit ggplot und geom_map

     id   Growth interv color 
1    ALENTEJO CENTRAL 479.11 (475,500] yellow 
2    ALENTEJO LITORAL 530.23 (525, Inf] green4 
3      ALGARVE 470.91 (450,475] red 
4     ALTO ALENTEJO 499.72 (475,500] yellow 
5     ALTO MINHO 519.31 (500,525] green 
6     ALTO TÂMEGA 460.50 (450,475] red 
7 ÁREA METROPOLITANA DE LISBOA 494.05 (475,500] yellow 
8 ÁREA METROPOLITANA DO PORTO 497.15 (475,500] yellow 
9       AVE 484.41 (475,500] yellow 
10    BAIXO ALENTEJO 461.79 (450,475] red 
11     BEIRA BAIXA 511.19 (500,525] green 
12 BEIRAS E SERRA DA ESTRELA 503.52 (500,525] green 
13      CÁVADO 486.08 (475,500] yellow 
14      DOURO 509.93 (500,525] green 
15    LEZÍRIA DO TEJO 514.67 (500,525] green 
16     MÉDIO TEJO 504.39 (500,525] green 
17      OESTE 488.85 (475,500] yellow 
18     R. A. AÇORES 461.74 (450,475] red 
19    R. A. MADEIRA 490.16 (475,500] yellow 
20    REGIÃO DE AVEIRO 490.46 (475,500] yellow 
21   REGIÃO DE COIMBRA 502.82 (500,525] green 
22    REGIÃO DE LEIRIA 507.60 (500,525] green 
23    TÂMEGA E SOUSA 452.97 (450,475] red 
24  TERRAS DE TRÁS-OS-MONTES 454.03 (450,475] red 
25    VISEU DÃO LAFÕES 514.99 (500,525] green 

und ich versuche, eine Karte mit den Farben in der letzten Spalte (regional $ Farbe) mit diesem Code zu zeichnen:

niv_leg=c("<450","]450; 475]", "]475;500]","]500; 525]", ">525") 
colors = c("red4", "red", "yellow", "green", "green4") 

prtnutsiii = ggplot()+ 
    geom_polygon(data = mapaf, aes(x=long, y = lat, group = group), fill = NA, colour="darkgray", size=0.25)+ 
    coord_equal() 

growth = prtnutsiii + 
    geom_map(data = regional, map = mapaf, aes(map_id = id, fill = color),colour="darkgray", size = 0.25) + 
    theme(legend.title = element_blank()) 
    scale_fill_manual(values = colors,labels = niv_leg) 
pisamathg + theme(legend.position = "left") 

ich erhalte diese Karte: enter image description here

Aber ich bin vor zwei Probleme und ich kann sie nicht herausfinden:

  1. ich nur 4 Etiketten in der Legende
  2. Die Farben korrekt an alle für die verschiedenen "id" Regionen ... nicht

Die "id" ploted (sie sollte 5) in der mapaf passen die "id" im regionalen datenframe so, ich habe keine ahnung, warum es nicht funktioniert ... Jede hilfe wird geschätzt.

PS: Die SHP-Datei (Mapaf) Ich bin hier verwendet, ist: https://dl.dropboxusercontent.com/u/112525/mapaf.txt

Dies ist dput (regional):

structure(list(id = c("ALENTEJO CENTRAL", "ALENTEJO LITORAL", 
"ALGARVE", "ALTO ALENTEJO", "ALTO MINHO", "ALTO TÂMEGA", "ÁREA METROPOLITANA DE LISBOA", 
"ÁREA METROPOLITANA DO PORTO", "AVE", "BAIXO ALENTEJO", "BEIRA BAIXA", 
"BEIRAS E SERRA DA ESTRELA", "CÁVADO", "DOURO", "LEZÍRIA DO TEJO", 
"MÉDIO TEJO", "OESTE", "R. A. AÇORES", "R. A. MADEIRA", "REGIÃO DE AVEIRO", 
"REGIÃO DE COIMBRA", "REGIÃO DE LEIRIA", "TÂMEGA E SOUSA", "TERRAS DE TRÁS-OS-MONTES", 
"VISEU DÃO LAFÕES"), MATHMEAN = c(479.11, 530.23, 470.91, 499.72, 
519.31, 460.5, 494.05, 497.15, 484.41, 461.79, 511.19, 503.52, 
486.08, 509.93, 514.67, 504.39, 488.85, 461.74, 490.16, 490.46, 
502.82, 507.6, 452.97, 454.03, 514.99), interv = structure(c(3L, 
5L, 2L, 3L, 4L, 2L, 3L, 3L, 3L, 2L, 4L, 4L, 3L, 4L, 4L, 4L, 3L, 
2L, 3L, 3L, 4L, 4L, 2L, 2L, 4L), .Label = c("[-Inf,450]", "(450,475]", 
"(475,500]", "(500,525]", "(525, Inf]"), class = "factor"), color = structure(c(3L, 
5L, 2L, 3L, 4L, 2L, 3L, 3L, 3L, 2L, 4L, 4L, 3L, 4L, 4L, 4L, 3L, 
2L, 3L, 3L, 4L, 4L, 2L, 2L, 4L), .Label = c("red4", "red", "yellow", 
"green", "green4"), class = "factor")), .Names = c("id", "MATHMEAN", 
"interv", "color"), row.names = c(NA, -25L), class = "data.frame") 
+1

versuchen Sie 'scale_fill_identity()' – hrbrmstr

+0

sollten Sie auch wirklich vereinfachen Polygone. das ist eine hohe Choropleth und du wirst das Rendering beschleunigen – hrbrmstr

+0

Danke hrbrmstr. Das Hinzufügen von 'scale_fill_identity()' bringt mir die richtigen Farben. Aber ich verliere die angepasste Legende ... werde die Hilfe anschauen, um zu sehen, ob es einen Workaround gibt? Ich habe "Fortify" verwendet, um einfach die Kartendaten zu verwenden ... Sie beziehen sich auf etwas anderes? – JPMD

Antwort

0

Versuchen Zugabe:

names(colors) <- niv_leg 

Vor dem ggplot anrufen. Ohne die Namen könnte die Mapping-Reihenfolge anders sein, was zu Ihrem Problem führt (glaube ich). Ich würde auch versuchen, es auszuführen, ohne die Etiketten zuerst zu setzen, um sicherzustellen, dass sie in der gleichen Reihenfolge durchkommen.

Wenn Sie den Code hinzufügen, um Ihre Daten einzulesen (z. B. mit dput) und wie Sie Ihre Shapefile geladen/vorbereitet haben, könnte ich direkt mit Lösungen spielen.

+0

Danke für die schnelle Antwort Mark. Ich werde die dput hinzufügen – JPMD

+0

Die Shape-Datei aus dieser Datei geladen wurde: https://dl.dropboxusercontent.com/u/112525/PRT__NUTS_ALL.shp mit diesem Code 'anzeigen <-readShapeSpatial (Datei.wähle()) 'und dann' mapa @ data $ id = regional $ id mapaf = verstärke (mapa, region = "id") ' – JPMD

+0

@JPMD oder noch besser, simuliere dies mit ein paar Quadraten oder benutze einen Dataset, der kommt mit R in einem minimalen, reproduzierbaren Beispiel. –

0

@hrbrmstr Vorschlag folgend, ich glaube, ich eine Arbeitslösung erhielt:

scale_fill_identity("Média", labels = niv_leg, breaks = colors, 
        guide = "legend") 

irgendwo nach dem geo_map(...)

Vielen Dank für das Feedback hinzufügen. Ich frage mich nur, warum die scale_fill_manual vermasselt die Farben ... Ich denke, es ist die Interpretation von Farben als Faktor und nicht der wahre Name der Farben ...

Verwandte Themen