Цвета легенды geom_point имеют перевернутые оверлеи вместо реальных - PullRequest
3 голосов
/ 04 июля 2019

На рисунке ниже видно, что легенда «цвета» работает неправильно.Я ожидаю цветной круг (например, цвет должен быть зеленым), однако фон зеленый, и вы можете видеть черное наложение того или иного ограничивающего прямоугольника.

enter image description here

Вот мой код:

library(ggmap)

c_map <- c(left = -86.817417, bottom = 36.133247, right = -86.793141, top = 36.153650)
campus <- get_stamenmap(c_map, zoom = 15, maptype = "toner-lines")

some_data <- read.csv('https://gist.githubusercontent.com/pconwell/085c1413e418adaa7c1e203c9680a0f8/raw/c7a3e5f7aa900de6bc2bcccd5dc5d9b8f7e31b81/some_data.csv')

ggmap(campus, darken = c(0.33, "white"), extent = "device") + 

  stat_density2d(data = some_data,
                 aes(x = longitude,
                     y = latitude,
                     fill = stat(nlevel),
                     alpha = stat(nlevel)),
                 size = 2,
                 bins = 12,
                 geom = "polygon"
  ) +

  scale_fill_gradientn(guide = "colorbar",
                       colours = c("#adddd1", "#3e98af", "#375980"),
                       breaks=c(0.2, 0.9), 
                       labels=c("Least","Most"), 
                       name = "Heat Map"
  ) +

  geom_point(data = some_data,
             aes(x = longitude,
                 y = latitude,
                 color = color,
                 shape = shape),
             alpha = .75,
             size = 4

  )  +

  scale_alpha_continuous(range = c(0.33, 0.66), 
                         guide = FALSE
  )

Как мне заставить легенду правильно отображать цвета?Значки отображаются на карте правильно, но не отображаются правильно в легенде.

Ответы [ 2 ]

3 голосов
/ 04 июля 2019

Упрощенная версия проблемы (без требования ggmap и ключа API Google) показывает, что в основном речь идет о лишних аргументах.Разберите код на более поздний слой, так как эти уровни создают то, что включается в легенду.Аргумент size в вашем stat_density2d ничего не делает с geom, установленным в polygon;это будет иметь смысл только для контуров, таких как:

library(ggplot2)

some_data <- read.csv('https://gist.githubusercontent.com/pconwell/085c1413e418adaa7c1e203c9680a0f8/raw/c7a3e5f7aa900de6bc2bcccd5dc5d9b8f7e31b81/some_data.csv')

ggplot(some_data, aes(x = longitude, y = latitude)) +
  geom_point(aes(color = color, shape = shape), alpha = 0.75, size = 4) +
  stat_density2d(aes(alpha = stat(nlevel)),
                 size = 2) + 
  guides(alpha = "none",
         color = guide_legend(override.aes = list(fill = NA)))

Там вы видите эффект size = 2 как в плотности, так и в легенде, где он отображается какжирная линия в цветовой легенде.

Поскольку для полигонов это необязательно, удалите аргумент размера или установите его равным 0. У вас также был элемент заливки, поступающий из слоя плотности, что делало затемненнымирайоны по легенде.Удалите это, явно установив заливку NA в легенде.

ggplot(some_data, aes(x = longitude, y = latitude)) +
  geom_point(aes(color = color, shape = shape), alpha = 0.75, size = 4) +
  stat_density2d(aes(fill = stat(nlevel), alpha = stat(nlevel)),
                 size = 0,
                 geom = "polygon") + 
  guides(alpha = "none",
         color = guide_legend(override.aes = list(fill = NA)))

1 голос
/ 04 июля 2019

Фон и ограничивающая рамка взяты из легенды о цвете многоугольника.Вот несколько более простой воспроизводимый пример:

library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 3.5.3

set.seed(42)
df <- as.data.frame(MASS::mvrnorm(100, c(0, 0), matrix(c(1, .6), 2, 2)))

ggplot(df, aes(V1, V2)) +
  stat_density_2d(geom = "polygon") +
  geom_point(aes(colour = cut_number(V1, 5)))

Это можно исправить, явно задав цвет многоугольника geom:

ggplot(df, aes(V1, V2)) +
  stat_density_2d(geom = "polygon", colour = NA) +
  geom_point(aes(colour = cut_number(V1, 5)))

Тем не менее, я немного удивлен, что легенда многоугольника появляется, даже если связанный слой не имеет ничего сопоставленного с цветом.Возможно, это ошибка?

ОБНОВЛЕНИЕ: Я не мог воспроизвести это поведение с другими геомами или статистикой, поэтому я посмотрел на плотность 2d немного больше: как ни странно, похоже, чтоЦветовая легенда для многоугольника появляется потому, что StatDensity2d имеет эстетическое значение по умолчанию для цвета:

StatDensity2d$default_aes
#> Aesthetic mapping: 
#> * `colour` -> "#3366FF"
#> * `size`   -> 0.5
StatDensity2d$default_aes <- aes()

ggplot(df, aes(V1, V2)) +
  stat_density_2d(geom = "polygon") +
  geom_point(aes(colour = cut_number(V1, 5)))

Создано в 2019-07-04 представьте пакет (v0.3.0)

...