Tmap предлагает пустую карту с одной переменной (но значения есть) - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть две числовые c переменные, которые я использую для создания двух тематических c карт с использованием пакета tmap. Тот же код работает для одной из переменных, но создает пустую карту для другой. Я создал небольшое подмножество данных, чтобы воспроизвести ошибку, здесь последняя категория все еще имеет некоторый цвет, но остальные остаются пустыми. В полном наборе данных все категории не заполнены.

Я действительно понятия не имею, что происходит, две переменные одного класса / типа, и я получаю правильный график, используя 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])

Есть идеи?

1 Ответ

2 голосов
/ 28 февраля 2020

Я думаю, что ваша проблема связана с масштабом ваших переменных.

try:

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

Это даст:

enter image description here

Вы можете устанавливать свои перерывы, как считаете нужным. Смена поддона (или создание нового поддона вручную) может улучшить карту.

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

enter image description here

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

enter image description here

Кроме того, вы можете указать ярлыки хотя бы метка аргумент.

Надеюсь, это поможет пролить свет на вашу проблему.

...