tmap выводит пустую карту с одной переменной (но значения есть)

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

Любые идеи?


person Rekarrr    schedule 28.02.2020    source источник
comment
Я не могу прочитать данные, это дает мне ошибку Error in parse(file = file, keep.source = keep.source) :unexpected $end.   -  person Ronak Shah    schedule 28.02.2020


Ответы (1)


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

пытаться:

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

введите здесь описание изображения

Кроме того, вы можете указать метки с помощью аргумента метки.

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

person Orlando Sabogal    schedule 28.02.2020