Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Heat map of Germany using spplot

Tags:

r

heatmap

sp

I was working on heat map of Germany using spplot, I had the shape file from GADM German shape file Level 1

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

I am able to make the heatmap but i suppose the maps are getting wrongly plotted, as for instance in my data "Bremen" has value as 0 but "Sachsen-Anhalt " is being plotted as white with 0 values, is it something with the mapping in the .rds file ?

Here is my code

  library(sp)
library(latticeExtra)

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

Here is the dput for sample :

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))

Output looks like this : enter image description here

like image 401
PSraj Avatar asked Jan 09 '16 09:01

PSraj


1 Answers

spplot works weirdly, and I went down a couple of blind alleys first. But basicly you were close, that at=sort(sample$clicks) was screwing it up, you just have to get rid of that.

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 =my.data@data, y = sample, by = "ID_1", all.y = TRUE)
my.data@data <- data.frame(my.data@data, 
                           sample[match(my.data@data[,"ID_1"], 
                           sample[,"ID_1"]),])

### German language hick-ups need to be resolved
enamessp <- gsub("?", "ue", my.data@data$NAME_1)
my.data@data$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)

Yielding:

enter image description here

And here is the data to check it against:

> 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 
like image 117
Mike Wise Avatar answered Nov 05 '22 18:11

Mike Wise