Контролировать внешний вид ggplot2, не затрагивая сюжет
Я рисую строки с ggplot2 следующим образом:
ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw()
.
Я считаю, что метки легенд малы, поэтому я хочу, чтобы они были больше. Если я изменю размер, строки на сюжете тоже меняются:
ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw()
.
Но я хочу видеть только толстые строки в легенде, я хочу, чтобы линии на сюжете были тонкими. Я попытался использовать 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]()