Легенда палитры ggplot2 не отображается - PullRequest
0 голосов
/ 12 мая 2018

Я только начал использовать пакет ggplot2 R, и следующий вопрос должен быть очень тривиальным, однако я потратил 2 часа на него безуспешно.

Мне просто нужно показать легенду scale_fill_distiller для палитры RdBu от -1 до 1 (от красного до синего) на моем ggplot.

Вот пример кода:

## Load ggplot2 package
require(ggplot2)

## Create data.frame for 4 countries
shape = map_data("world") %>%
                 filter(region == "Germany" | region == 'Italy' | region == 'France' | region == 'UK')

## Order data.frame by country name
shape = shape[with(shape, order(region)), ]
rownames(shape) = NULL # remove rownames

##### Assign 4 different values (between -1 and 1) to each country by creating a new column 'id'
## These will be the values to be plotted with ggplot2 palette
shape[c(1:605),'id'] = 0.2
shape[c(606:1173),'id'] = -0.4
shape[c(1174:1774),'id'] = -0.9
shape[c(1775:2764),'id'] = 0.7

##### Make plot
ggplot() +
      ## plot countries borders
      geom_polygon(data = shape, aes(x = long, y = lat, group = group, fill = id), colour = 'black') +
      ## adjust coordinates
      coord_map() + 
      ## remove any background
      ggthemes::theme_map() + 
      ## add colour palette
      scale_fill_distiller(palette = 'RdBu', limits = c(1, -1), breaks = 50) 

Легенда о палитре RdBu должна появиться автоматически, но здесь это не так. Есть ли слой, который его маскирует?

OR

Есть ли способ создать новую легенду с нуля и добавить ее к сюжету выше?

Мне нужно что-то вроде рисунка ниже, но от -1 до 1 (от красного к синему) и по вертикали:

enter image description here

Спасибо

1 Ответ

0 голосов
/ 12 мая 2018

Диапазон, указанный в limits, должен быть c(min, max), а не c(max, min):

, это работает, как и ожидалось:

library(ggmap)
library(ggplot2)
library(ggthemes)

ggplot() +
  geom_polygon(data = shape,
               aes(x = long, y = lat, group = group, fill = id), colour = 'black') +
  coord_map() +
  ggthemes::theme_map() +
  scale_fill_distiller(palette = 'RdBu', limits = c(-1,1))

enter image description here

, в то время как limits = c(1, -1) создает график без цветовой шкалы:

ggplot() +
  geom_polygon(data = shape,
               aes(x = long, y = lat, group = group, fill = id), colour = 'black') +
  coord_map() +
  ggthemes::theme_map() +
  scale_fill_distiller(palette = 'RdBu', limits = c(1, -1))

enter image description here

Если вы хотите отобразить значения вВ обратном порядке вы можете использовать аргумент direction:

ggplot() +
  geom_polygon(data = shape,
               aes(x = long, y = lat, group = group, fill = id), colour = 'black') +
  coord_map() +
  ggthemes::theme_map() +
  scale_fill_distiller(palette = "RdBu",
                       limits = c(-1, 1),
                       breaks = c(-1, 0, 1),
                       direction = 1)

enter image description here

...