Контролировать внешний вид ggplot2, не затрагивая сюжет

Я рисую строки с ggplot2 следующим образом:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw()

current plot.

Я считаю, что метки легенд малы, поэтому я хочу, чтобы они были больше. Если я изменю размер, строки на сюжете тоже меняются:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw()

thick plot lines.

Но я хочу видеть только толстые строки в легенде, я хочу, чтобы линии на сюжете были тонкими. Я попытался использовать legend.key.size, но он меняет квадрат метки, а не ширину линии:

library(grid)  # for unit
ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw() + theme(legend.key.size=unit(1,"cm"))

big legend keys

Я также пытался использовать точки:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + geom_point(size=4) + theme_bw()

Но, конечно, это все равно влияет как на сюжет, так и на легенду:

points

Я хотел использовать строки для сюжета и точки/точки для легенды.

Итак, я спрашиваю о двух вещах:

  • Как изменить ширину линии в легенде без изменения графика?
  • Как нарисовать линии в сюжете, но нарисуйте точки/точки/квадраты в легенде?

Ответ 1

Чтобы изменить ширину линии только в легенде, вы должны использовать функцию guides(), а затем для colour= использовать guide_legend() с помощью override.aes= и установить size=. Это переопределит размер, используемый в сюжете, и будет использовать новое значение размера только для легенды.

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+
       guides(colour = guide_legend(override.aes = list(size=3)))

enter image description here

Чтобы получить точки в легенде и линии в обходном пути, добавьте geom_point(size=0), чтобы убедиться, что точки невидимы, а затем в guides() установите linetype=0, чтобы удалить строки и size=3, чтобы получить большие точки.

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+
       geom_point(size=0)+
       guides(colour = guide_legend(override.aes = list(size=3,linetype=0)))

enter image description here