Видаліть зайві легенди в 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.