tmap 提出了一个带有一个变量的空白地图(但值在那里)

tmap coming up with blank map with one variable (but values are there)

我有两个数字变量,我使用 tmap 包创建两个专题地图。相同的代码适用于其中一个变量,但会为另一个变量创建一个空白映射。我创建了一小部分数据来重现错误,这里最后一类仍然有一些颜色,但其余的都是空白的。在完整的数据集中,所有类别都是空白的。

我真的不知道发生了什么,这两个变量是相同的class/type,而且我使用 plot() 得到了正确的绘图,所以我想不出哪里出了问题!任何提示将不胜感激!

这是我试过的代码:

library(sf)
library(tmap)


df <- dget("https://www.dropbox.com/s/8yap9bdknyvelwq/tmap_df.txt?dl=1") 

#works:
tm_shape(df) + 
  tm_fill("v1", style = "quantile", title = "Change in V1", border.alpha = 0, palette = "-RdBu", midpoint = 0)

#doesn't work:
tm_shape(df) + 
  tm_fill("v2", title = "Change in V2",  style = "quantile", border.alpha = 0, palette = "-RdBu", midpoint = 0)

#the two variables are the same class/type
class(df$v1) == class(df$v2)
typeof(df$v1) == typeof(df$v2)

#if I use plot(), it works
plot(df[,1])
plot(df[,2])

有什么想法吗?

我认为您的问题与变量的比例有关。

尝试:

summary(df$v1)
summary(df$v2)

并且您会注意到您的一小部分数据具有很大的价值

dim(df[df$v2>0,])
dim(df[df$v2>10000,])

一个解决方案可能是手动设置中断。像这样:

tm_shape(df) + 
tm_fill("v2", title = "Change in V2",  
        breaks = c(-1000, -500, 0, 500, 1000, 10000, 30000), 
        border.alpha = 0, palette = "-RdBu")

这将产生:

您可以根据需要设置休息时间。 更改托盘(或手动创建新托盘)可以改进地图。

tm_shape(df) + 
  tm_fill("v2", title = "Change in V2",  
          breaks = c(-1000, -500, 0, 500, 1000, 10000, 30000), 
          border.alpha = 0, palette = "-Greens")

tm_shape(df) + 
  tm_fill("v2", title = "Change in V2",  
          breaks = c(-1000, -500, 0, 500, 1000, 10000, 30000), 
          border.alpha = 0, palette = "PuBuGn")

此外,您可以通过 labels 参数指定标签。

希望它有助于阐明您的问题。