使用spplot的德国热图

时间:2016-01-09 09:27:56

标签: r heatmap sp

我正在使用spplot处理德国的热图,我有来自GADM German shape file Level 1的形状文件

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

我能够制作热图,但我认为地图被错误地绘制,例如在我的数据中“不来梅”的值为0但是“萨克森 - 安哈尔特” “正在被绘制为带有0值的白色,是否与.rds文件中的映射有关?

这是我的代码

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

以下是样本的输入:

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

输出如下所示:enter image description here

1 个答案:

答案 0 :(得分:5)

spplot奇怪地工作,我先走了几个盲道。但基本上你很亲密,at=sort(sample$clicks)搞砸了,你只需要摆脱它。

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)

产量:

enter image description here

以下是检查它的数据:

> 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