Управление ggplot2 legend look без влияния на сюжет


Я строю линии с 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"))

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

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

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

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

поэтому я спрашиваю о двух вещах:

  1. как изменить ширину линии в легенде, без изменения сюжета?
  2. как рисовать линии в сюжете, но рисовать точки/точки/квадраты в легенде?
1 62

1 ответ:

изменить ширину линии только в легенде, вы должны использовать функцию guides() и затем на colour= использовать guide_legend() С override.aes= и set 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() set 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