【问题标题】:Heat map of Germany using spplot使用 spplot 的德国热图
【发布时间】:2016-04-14 00:09:38
【问题描述】:

我正在使用 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))

输出如下所示:

【问题讨论】:

  • 对不起,但我真的想知道“德国热图”是否与普通热图不同:)。
  • 不,不仅仅是我对错误绘制的区域有问题,是形状文件吗?你能帮忙吗?
  • 我看过了,但我从哪里得到“DEU_adm1.rds”?
  • 我分享了链接“德国形状文件”,您可以在那里下载它,从下拉列表中选择德国,然后从第二个下拉列表中选择 R 形状文件的选项,然后在结果页面上您可以下载名为 Level 1 的文件。希望对您有所帮助
  • 好的,修复了你的最后一个错误。

标签: r heatmap sp


【解决方案1】:

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)

产量:

以下是要检查的数据:

> 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 

【讨论】:

  • 是的,这解决了这个问题,但我想知道为什么at=sort(sample$clicks) 搞砸了,理想情况下它应该根据点击量(根据包装描述)将东西分箱,然后相应地改变颜色,如果我在这里错了,请纠正我
  • 不,阅读?spplot 的文档:参数at 据说“指定颜色变化的值”。所以它设置了过渡点。你可能不需要这样做。 zcol 做你认为做的事,而且你已经指定了。
  • 抱歉,您认为地图正确吗?点击次数最多的是“Nordrhein-Westfalen”(59 次点击)而不是“Sachsen-Anhalt”(5 次点击)(这被映射为色标上最深的蓝色),同样,“Bayern”根据颜色应该是绿色比例(41 点击),但它是黄色的。
  • 您能否提供 ID 到州名的映射。否则很难弄清楚。
  • 是的,您可以查看该final &lt;- merge(x =my.data@data, y = sample, by = "ID_1", all.y = TRUE) 的数据框,这里您将有区域和ID 映射(NAME_1 有区域)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多