Добавить элемент в существующую легенду - PullRequest
0 голосов
/ 09 сентября 2018

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

Я использую два data.frames (df_1 и df_2) и два geom_point звонка для них. Мне удалось создать легенду для df_2 , но я не смог добавить вторую легенду для df_1.

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

########## Create sample data
set.seed(69)
df_1 = data.frame(lat = rnorm(20), 
                  lon = rnorm(20), 
                  cor = c(rep('positive', 12), rep('negative', 8)), 
                  sign = 0)

df_2 = data.frame(lat = rnorm(20), 
                  lon = rnorm(20), 
                  cor = c(rep('positive', 7), rep('negative', 13)), 
                  sign = c(rep(99, 5), rep(95, 6), rep(90,9)))

#### Plot data
library(ggplot2)
p = ggplot() +

    # geom_point for df_1
    geom_point(data=df_1, aes(x=lon, y=lat), 
               alpha=0.7, color = 'darkgrey', size = 3) +

    # geom_point for df_2
    geom_point(data=df_2, aes(x=lon, y=lat, size=sign, colour = cor), alpha = 0.5) +

    scale_color_manual(values=c("red", "blue"),
                       name='cor', 
                       labels = c('neg', 'pos'),
                       guide = guide_legend(override.aes = list(alpha = 1, size = 3))) +

    scale_size(range = c(1,3), 
               breaks = c(90, 95, 99),
               labels = c(0.1, 0.05, 0.01),
               name = 'sign',
               guide = guide_legend(override.aes = list(colour = 'black', 
                                                        alpha = 1)))

print(p)

enter image description here

Как добавить легенду для geom_point вызова df_1?

Было бы достаточно добавить третью точку темного серого в cor (правая легенда) с надписью «not sign».

1 Ответ

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

Полагаю, простое решение - делать то, что вы просите добавить 3-ю темную серую точку к легенде короля . Для этого вам необходимо:

  1. Измените cor значения в df_1 на все одинаковые.
  2. Укажите цвет в df_1 aes.
  3. Добавить информацию для третьего пункта в scale_color_manual.

Код:

# Change values so we would have single color for them
df_1$cor <- "foo" 

library(ggplot2)
ggplot() +
    geom_point(aes(lon, lat, color = cor), df_1,
               alpha = 0.7, size = 3) +
    geom_point(aes(lon, lat, size = sign, colour = cor), df_2,
               alpha = 0.5) +
    scale_color_manual(values = c("darkgrey", "red", "blue"),
                       labels = c("not sign", "neg", "pos"),
                       guide = guide_legend(override.aes = list(alpha = 1, size = 3))) +
    scale_size(range = c(1, 3), 
               breaks = c(90, 95, 99),
               labels = c(0.1, 0.05, 0.01),
               guide = guide_legend(override.aes = list(colour = "black", alpha = 1)))

Результат:

enter image description here

...