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 参数指定标签。
希望它有助于阐明您的问题。
我有两个数字变量,我使用 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 参数指定标签。
希望它有助于阐明您的问题。