2016-01-09 11 views
5

pracowałem na mapie ciepła Niemiec użyciu spplot miałem z GADM German shape file wypoziomowania shapefile 1mapa cieplna Niemczech użyciu spplot

http://biogeo.ucdavis.edu/data/gadm2.8/rds/DEU_adm1.rds

jestem w stanie zrobić mapę cieplną ale przypuszczam mapy są źle naszkicowane, jak na przykład w moich danych "Bremen" ma wartość 0, ale "Sachsen-Anhalt " jest wykreślane jako białe z wartościami 0, czy jest to coś z mapowaniem w pliku .rds?

Oto mój kod

library(sp) 
library(latticeExtra) 

### load the German federal state polygons 
my.data <- readRDS("DEU_adm1.rds") 
sample <- read.csv(file.choose()) 
final <- merge(x [email protected], y = sample, by = "ID_1", all.y = TRUE) 
[email protected] <- data.frame([email protected], sample[match([email protected][,"ID_1"], sample[,"ID_1"]),]) 
### German language hick-ups need to be resolved 
enamessp <- gsub("?", "ue", [email protected]$NAME_1) 
[email protected]$NAME_1 <- enamessp 

### insert the newly created clicksvariable into the spatial data frame 
my.data$clicks <- sample$clicks 


clrs <- c('#F4F1A2', 
      '#F4F1A2', 
      '#E6EAA2', 
      '#E6EAA2', 
      '#CFE3A2', 
      '#CFE3A2', 
      '#9AD0A3', 
      '#9AD0A3', 
      '#7FC9A4', 
      '#7FC9A4', 
      '#32B9A3', 
      '#32B9A3', 
      '#00A7A2', 
      '#00667E', 
      '#00667E', 
      '#1D4F73' 
) 
spplot(my.data, zcol = "clicks", main = "Region Distribution", 
     col.regions = clrs,at=sort(sample$clicks)) 

Oto dput dla próbki:

structure(list(ID_1 = c(7L, 4L, 5L, 14L, 12L, 15L, 11L, 13L, 
2L, 3L, 16L, 6L, 10L, 9L, 8L, 1L), clicks = c(19L, 4L, 0L, 12L, 
4L, 3L, 8L, 5L, 41L, 12L, 4L, 11L, 59L, 19L, 4L, 25L)), .Names = c("ID_1", 
"clicks"), class = "data.frame", row.names = c(NA, -16L)) 

wyjściowe wygląda następująco: enter image description here

+3

Niestety, ale ja naprawdę zastanawiałem się, czy "niemiecki map ciepła" była czymś inny niż normalna mapa ciepła :). –

+0

Nie chodzi tylko o to, że mam problemy z błędnie wykreślonymi regionami, czy to plik kształtu? Czy możesz tu pomóc? – PSraj

+0

Spojrzałem na to, ale skąd mam "DEU_adm1.rds"? –

Odpowiedz

4

spplot prace dziwnie, a ja poszedłem parę najpierw ślepe zaułki. Ale w zasadzie byłeś blisko, że to się zepsuło, po prostu musisz się tego pozbyć.

library(sp) 

### load the German geo map polygons 
my.data <- readRDS("DEU_adm1.rds") 

### sample "clicks" data with German state coded as ID_1 
sample <- data.frame( 
    ID_1 = c(7, 4, 5, 14, 12, 15, 11, 13, 2, 3, 16, 6, 10, 9, 8, 1L), 
    clicks = c(19, 4, 0, 12, 4, 3, 8, 5, 41, 12, 4, 11, 59, 19, 4, 25L)) 

### Merge sample data with geo map data 
final <- merge(x [email protected], y = sample, by = "ID_1", all.y = TRUE) 
[email protected] <- data.frame([email protected], 
          sample[match([email protected][,"ID_1"], 
          sample[,"ID_1"]),]) 

### German language hick-ups need to be resolved 
enamessp <- gsub("?", "ue", [email protected]$NAME_1) 
[email protected]$NAME_1 <- enamessp 

# print out states and clicks (sorted high to low) for verification 
final[ order(-final$clicks),c("ID_1","NAME_1","HASC_1","clicks") ] 

### insert the newly created clicksvariable into the spatial data frame 
my.data$clicks <- final$clicks 

clrs <- c('#F4F1A2','#F4F1A2','#E6EAA2','#E6EAA2', 
      '#CFE3A2','#CFE3A2','#9AD0A3','#9AD0A3', 
      '#7FC9A4','#7FC9A4','#32B9A3','#32B9A3', 
      '#00A7A2','#00667E','#00667E','#1D4F73') 

spplot(my.data, zcol = "clicks", main = "Clicks Region Distribution", col.regions = clrs) 

Uzyskano

enter image description here

A oto dane do sprawdzenia go przed:

> print(sample[ order(-sample$clicks), ]) 
    ID_1 clicks      land hasc 
13 10  59    Saxony-Anhalt DE.ST 
9  2  41    Lower Saxony DE.NI 
16 1  25     Thuringia DE.TH 
1  7  19       DE.BW 
14 9  19      Saxony DE.SN 
4 14  12       DE.BR 
10 3  12  North Rhine-Westphalia DE.NW 
12 6  11       DE.SL 
7 11  8      Hesse DE.HE 
8 13  5 Mecklenburg-West Pomerania DE.MV 
2  4  4     Bavaria DE.BY 
5 12  4      <Null> DE.HB 
11 16  4  Rhineland-Palatinate DE.RP 
15 8  4       DE.SH 
6 15  3       DE.HH 
3  5  0       DE.BE 
+0

Tak, to rozwiązuje problem, ale zastanawiam się, dlaczego 'at = sort (sample $ clicks)' podkręca sprawy, najlepiej powinien mieć binned na podstawie liczby kliknięć (zgodnie z opisem pakietu), a następnie odpowiednio zmienić kolor, popraw mnie, jeśli się mylę tutaj – PSraj

+0

Nie, czytając dokumenty na '? spplot': mówi się, że parametr' at' określa "przy jakich wartościach zmieniają się kolory". W ten sposób ustawia punkty przejścia. Prawdopodobnie nie musisz tego robić. 'zcol' robi to, co uważasz, że tak jest i już to określiłeś. –

+0

Przepraszamy, ale myślisz, że mapa jest poprawna? Największe kliknięcia to "Nordrhein-Westfalen" (59 kliknięć), a nie "Sachsen-Anhalt" (5 kliknięć) (jest to zmapowany jako najciemniejszy niebieski w skali kolorów), podobnie "Bayern" powinien być zielony w zależności od koloru Skala (41 kliknięć), ale jest żółtawa. – PSraj