Видаліть зайві легенди в ggplot2


91

У мене є простий фрейм даних, за допомогою якого я намагаюся зробити комбінований графік ліній і точок ggplot2. Припустимо, мої дані виглядають так:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))

І я намагаюся скласти сюжет:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

Результат виглядає чудово, за одним винятком. У нього є додаткова легенда, що показує alphaдля мого geom_pointшару.

Додаткова легенда для прозорості <code> geom_point </code>

Як я можу зберегти легенду, яка відображає групові кольори, але не ту, яка відображає мої альфа-налаштування?

Відповіді:


172

Естетику можна встановити або відобразити в межах ggplotдзвінка.

  • Естетика, визначена всередині aes(...), відображається на основі даних і створюється легенда.
  • Естетику також можна встановити для одного значення, визначивши її зовні aes().

У цьому випадку, схоже, ви хочете встановити alpha = 0.8 та зіставити карту colour = group .

Зробити це,

Розмістіть alpha = 0.8зовнішнє aes()визначення.

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g

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

Для будь-якої відображеної змінної ви можете подавити появу легенди, використовуючи guide = 'none'відповідний scale_...виклик. напр.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')

Що поверне ідентичний сюжет

EDIT @ Коментар Джорана спотовий, я зробив свою відповідь більш вичерпною


18
Це правильний метод, оскільки OP встановлює, а не відображає естетику, але загалом ви можете придушити появу будь-якої легенди, використовуючи щось подібне g + scale_alpha(guide = "none").
joran

Справді. Відповідь детально розроблена. Більш сенсом є вичерпна відповідь, а не лише конкретна проблема ОП.
mnel

4
Велике спасибі за додане пояснення. Це робить довгий шлях до того, щоб допомогти мені зрозуміти філософію ggplot.
Wilduck

2
Я використовую ggplot більше року, і НІКОЛИ не розумів різниці між відображеною або встановленою змінною. Це, безумовно, найкраща така відповідь, яку я коли-небудь бачив, вітаю.
Аміт Колі

1
@theforestecologist Це тому, що groupестетика не генерує ніяких ваг або напрямних самостійно. Це завжди своєрідне модифікування чогось іншого. Ви ніколи не отримаєте легенду про "групову" естетику.
joran

41

Просто додайте show.legend = Fкод після тієї частини, де ви його не хочете.

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)

1
Це набагато інтуїтивніше, ніж картографування проти встановлення естетики (хоча це також очищає багато непорозумінь)
Вассадамо,

1

Для старих версій ggplot2 (версії до 0.9.2, випущені наприкінці 2012 року), ця відповідь повинна працювати:

Я спробував це з a, colour_scaleі це не спрацювало. Здається, colour_scale_hueелемент працює як функція із параметром за замовчуванням TRUE. Я додав, scale_colour_hue(legend=FALSE)і це спрацювало.

Я не впевнений, що це стосується всіх елементів кольорової шкали в ggplot


3
Використання legendу scale_*дзвінку застаріло, краще робити scale_colour_hue(guide = "none").
Грегор Томас

3
беручи до уваги, що legend=FALSEфайл застарілий, як зазначає коментар @shujaa, це фактично дубльована відповідь, тобто додати функцію guide = "none"до scale_fill/color*.
Девід Лебауер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.