Добавьте одну точку к легенде из geom_point и scale_fill_gradient - PullRequest
0 голосов
/ 27 сентября 2018

Уже несколько месяцев я работаю с ggplot2, но я все еще очень легко зацикливаюсь на базовых вещах, поскольку варианты здесь близки к бесконечности.

Давайте предположим, что у меня есть простой графиксоздан следующим образом:

set.seed(100)
df_1 = data.frame(lat = rnorm(20), 
                  lon = rnorm(20), 
                  x = rnorm(20))


library(ggplot2)
p = ggplot() +

    geom_point(data = df_1, 
           aes(x=lon, y=lat, fill = x), 
           size = 5, colour = 'black', pch = 21) +

    scale_fill_gradient2(low = "green", mid = 'white', high = "yellow",
                         breaks = c(-1, 0, 1), 
                         labels = c('-1', '0', '1'),
                         limits = c(-1,1))

print(p)

enter image description here

Как добавить вторую легенду с заголовком (например, y), показывающую только один из этих кругов на белом фонеи черный контур?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Чтобы добавить дополнительный элемент к легенде, вы должны добавить его к сюжету.Вы можете сделать это с помощью:

geom_point(aes(alpha = ""), head(df_1, 1),
           size = 5, fill = "white", pch = 21) +

Здесь мы добавляем первую точку в ваш набор данных, устанавливая ее fill и фиктивное значение alpha (нам нужно установить что-то в aes, чтобы добавить его влегенда).Я использую "", поэтому у нас не будет текста рядом с точкой.
Кроме того, важно добавить эту точку перед основной geom_point, поскольку она будет покрывать исходную точку (с белой заливкой).Вам также необходимо сбросить alpha значения с "" на 1 и установить требуемое имя легенды для alpha в labs().

library(ggplot2)
ggplot(df_1, aes(lon, lat, fill = x)) +
    geom_point(aes(alpha = ""), head(df_1, 1),
               size = 5, fill = "white", pch = 21) +
    geom_point(size = 5, pch = 21) +
    scale_fill_gradient2(low = "green", mid = "white", high = "yellow",
                         breaks = c(-1, 0, 1), 
                         labels = c("-1", "0", "1"),
                         limits = c(-1, 1)) +
    scale_alpha_manual(values = 1) +
    labs(alpha = "y")

enter image description here


PS.Я сделал некоторые изменения в вашем ggplot2 коде:

  • Вы можете указать данные и aes в течение первого ggplot вызова.
  • В слоях geom aes - первый аргумент, данные - второй.Так что вместо geom_point(data = df_1, aes(...).Вы используете geom_point(aes(...), df_1).
  • color = "black" - настройка по умолчанию - указывать ее не нужно.
0 голосов
/ 27 сентября 2018

Вы можете добавить коэффициент с одним уровнем и использовать scale_color_manual:

set.seed(100)
df_1 = data.frame(lat = rnorm(20), 
                  lon = rnorm(20), 
                  x = rnorm(20),
                  new = rep('Coordinates', 20))


library(ggplot2)
p = ggplot() +

  geom_point(data = df_1, 
             aes(x=lon, y=lat, fill = x, colour = new), 
             size = 5, pch = 21) +
  scale_fill_gradient2(low = "green", mid = 'white', high = "yellow",
                       breaks = c(-1, 0, 1), 
                       labels = c('-1', '0', '1'),
                       limits = c(-1,1)) +
  scale_color_manual(name = "", values = "black")

print(p)

enter image description here

...