Steuern Sie das Aussehen der ggplot2-Legende, ohne das Diagramm zu beeinflussen

73

Ich zeichne Linien mit ggplot2 wie folgt:

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

aktuelles Grundstück.

Ich finde Legendenmarken klein, deshalb möchte ich, dass sie größer sind. Wenn ich die Größe ändere, ändern sich auch die Linien im Plot:

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

dicke Handlungslinien.

Aber ich möchte nur dicke Linien in der Legende sehen, ich möchte, dass die Linien auf dem Plot dünn sind. Ich habe versucht zu verwenden, legend.key.sizeaber es ändert das Quadrat der Marke, nicht die Breite der Linie:

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

große Legendenschlüssel

Ich habe auch versucht, Punkte zu verwenden:

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

Aber natürlich betrifft es immer noch sowohl die Handlung als auch die Legende:

Punkte

Ich wollte Linien für die Handlung und Punkte / Punkte für die Legende verwenden.

Ich frage also nach zwei Dingen:

  1. Wie kann ich die Linienbreite in der Legende ändern, ohne das Diagramm zu ändern?
  2. Wie zeichne ich Linien in der Handlung, aber zeichne Punkte / Punkte / Quadrate in der Legende?
Baltazar
quelle

Antworten:

108

Um Änderungslinienbreite nur in der Legende sollten Sie Funktion verwenden guides()und dann für den colour=Einsatz guide_legend()mit override.aes=und Satz size=. Dadurch wird die im Plot verwendete Größe überschrieben und der neue Größenwert nur für die Legende verwendet.

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

Geben Sie hier die Bildbeschreibung ein

Um Punkte in der Legende und Linien in der Plotumgehung zu erhalten, müssen Sie hinzufügen, geom_point(size=0)um sicherzustellen, dass Punkte unsichtbar sind, und dann im guides()Satz linetype=0, um Linien zu entfernen und size=3größere Punkte zu erhalten.

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)))

Geben Sie hier die Bildbeschreibung ein

Didzis Elferts
quelle
Super, danke! Das habe ich gebraucht! Gibt es Chancen, meine zweite Frage zu beantworten?
Baltazar
4
Kann dies in einem Thema festgelegt werden?
nate