So ändern Sie den Legendentitel in ggplot

299

Ich habe die folgende Handlung wie unten. Es wurde mit diesem Befehl erstellt:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

Als nächstes möchte ich den Legendentitel von cond in NEW LEGEND TITLE ändern .

Also habe ich einfach die folgende Zeile hinzugefügt und das Ende des obigen Codes hinzugefügt:

+labs(colour="NEW LEGEND TITLE")

Aber es funktioniert nicht. Was ist der richtige Weg, um es zu tun?

Geben Sie hier die Bildbeschreibung ein

neversaint
quelle
110
labs(fill="xyz")sollte tun
Taufe
1
@baptiste Ich bin mehrmals auf diese Frage zurückgekommen, ohne Ihren Kommentar zu bemerken. Könnten Sie sie als Antwort aufschreiben? IMO ist es die einfachste Lösung und verdient eine gewisse Anerkennung
User632716
3
@ User632716 es ist bereits in jemandes Antwort unten
Taufe
7
es funktioniert nicht ...
Shenglih
1
Für diejenigen, die nach einer Antwort mit Plots mit mehreren geom_Anweisungen suchen , empfehle ich die Antwort unter stackoverflow.com/a/38485985/1169233 , es ist die einzige, die für mich funktioniert hat.
Waldir Leoncio

Antworten:

347

Das sollte funktionieren:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(oder alternativ)

p + scale_fill_discrete(name = "New Legend Title")
Arun
quelle
10
Eine andere Alternative istp$labels$fill <- "New Legend Title"
Alex Holcombe
3
Was ist der Unterschied zwischen Guides und scale_fill_discrete
Medhat
18
p$labels$fillhat bei mir nicht funktioniert. Mit ggplot2_2.1.0ich benutzep$labels$colour <- "New legend title"
ClementWalter
4
p$labels$fill ist schön, aber wenn Sie mehr als eine Variable in der Ästhetik (Linientyp, Farbe, Form) in aes verwenden, müssen Sie sie für jede einzeln ändern.
Discipulus
226

Ich habe mich nicht viel damit beschäftigt, aber weil du fill = cond in ggplot () verwendet hast,

 + labs(color='NEW LEGEND TITLE') 

könnte nicht funktioniert haben. Wie auch immer Sie Farbe durch Füllen ersetzen , es funktioniert!

+ labs(fill='NEW LEGEND TITLE') 

Dies hat bei mir in ggplot2_2.1.0 funktioniert

Rohan Sadale
quelle
20
Ich denke, dies ist die direkteste Antwort, sie macht genau das, was OP verlangt, mit höchstens einer zusätzlichen Zeile
Leo
3
Sowohl color = als auch fill = sollten funktionieren. Dies ist die "richtige" Antwort auf die Frage, IMO
Dan
3
Ob die Farbe der Füllung funktionieren würde, hängt davon ab, welcher "Bedingung" (oder Gruppe in anderen Fällen) wirklich zugeordnet ist. Eine gute Erklärung finden Sie in cookbook-r.com/Graphs/Legends_(ggplot2)
user1442363
3
Dies ist die beste Antwort.
Akshay Gaur
1
Hinweis: In ggplot2 3.0+ hat diese Lösung nicht funktioniert: gelöst durchp + guides(fill=guide_legend(title="New Legend Title"))
Sumanth Lazarus
39

Da Sie zwei Dichten haben, kann es sein, dass Sie Ihre eigenen Farben einstellen möchten scale_fill_manual.

Wenn ja, können Sie Folgendes tun:

df <- data.frame(x=1:10,group=c(rep("a",5),rep("b",5)))

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

Geben Sie hier die Bildbeschreibung ein

user1317221_G
quelle
27

Keiner der oben genannten Codes hat bei mir funktioniert.

Folgendes habe ich gefunden und es hat funktioniert.

labs(color = "sale year")

Sie können auch ein Leerzeichen zwischen dem Titel und der Anzeige einfügen, indem Sie \nam Ende hinzufügen .

labs(color = 'sale year\n")

Rohit Yadav
quelle
2
Wie unterscheidet sich das von dieser Antwort ?
Merv
3
Ja, ich habe jedes einzelne Beispiel oben ausprobiert und dies ist das einzige, das für mich funktioniert hat. Vielen Dank!
SummerEla
Wie würde diese Arbeit angesichts der ursprünglichen Post-Frage scheinen, dass fillanstelle von color(oder colour) benötigt wird? In Anbetracht des Zeitpunkts der Frage ist es möglich, dass es sich um eine ggplot2Version handelt.
Steveb
1
@merv Der Hauptunterschied ist, dass dieser tatsächlich funktioniert.
Luís de Sousa
16

Da Sie in Ihrem Code ggplot(data, fill= cond)das Histogramm erstellt haben, müssen Sie den Legendentitel hinzufügen, indem Sie auch "Beschriften" im Beschriftungsabschnitt verwenden, d +labs(fill="Title name"). H. Wenn Sie einen anderen Plottyp verwenden, bei dem der Code ggplot war (Daten, Farbe = Kond), können Sie diesen verwenden +labs(colour= "Title Name"). Zusammenfassend muss das Laborargument mit dem Argument aes übereinstimmen.

Ich habe + guides(fill=guide_legend("my awesome title"))den Legendentitel in geom_bar-Plots geändert, aber es schien für geom_point nicht zu funktionieren.

kulianne
quelle
..., aber für geom_point(), das funktioniert für mich:guides(color=guide_legend("Type:"))
knb
1
@knb, Ihre Methode funktioniert:guides(color=guide_legend("Score Ranking:"))
BMC
1
Wie unterscheidet sich das von dieser Antwort ?
Merv
6

Es gibt eine andere sehr einfache Antwort, die für einige einfache Diagramme funktionieren kann.

Fügen Sie einfach einen Aufruf von guide_legend () in Ihr Diagramm ein.

ggplot(...) + ... + guide_legend(title="my awesome title")

Wie in den sehr schönen ggplot-Dokumenten gezeigt .

Wenn dies nicht funktioniert, können Sie Ihre Guide-Parameter mit einem Aufruf von Guides genauer einstellen :

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

Sie können auch die Form / Farbe / Größe variieren, indem Sie diese Parameter auch für Ihren Anruf guidesangeben.

Yourpalal
quelle
26
Dies funktionierte nicht für mich, aber es qplot(…) + guides(color=guide_legend(title="sale year"))funktionierte
Arnaud A
3

Nur um der Liste hinzuzufügen (die anderen Optionen hier haben bei mir nicht funktioniert), können Sie auch die Funktion update_labels für ggplot verwenden:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
update_labels(p, list(colour="MY NEW LEGEND TITLE")

Auf diese Weise können Sie auch die Beschriftungen der x- und y-Achse mit separaten Zeilen ändern:

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")
user3791304
quelle
2

Ich habe festgestellt, dass es zwei Möglichkeiten gibt, legend.title für ggboxplot () zu ändern / anzugeben:

library(ggpubr)

bxp.defaultLegend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                               color = "dose", palette = "jco")

# Solution 1, setup legend.title directly in ggboxplot()
bxp.legend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                 color = "dose", palette = "jco", legend.title="Dose (mg)")

# Solution 2: Change legend title and appearnace in ggboxplot() using labs() and theme() option:
plot1 <-  bxp.defaultLegend + labs(color = "Dose (mg)") +
  theme(legend.title = element_text(color = "blue", size = 10), legend.text = element_text(color = "red"))

ggarrange(list(bxp.legend, bxp.defaultLegend, plot1), nrow = 1, ncol = 3,  common.legend = TRUE)

Der Code wird basierend auf dem Beispiel von GitHub geändert .

Guter Wille
quelle
1

Ich verwende ein facet_wrap in meinem ggplot und keine der vorgeschlagenen Lösungen hat für mich funktioniert, außer der Lösung von ArnaudA:

qplot() + guides(color=guide_legend(title="sale year")) 
Birdonawire
quelle
1

Viele Leute verbringen viel Zeit damit, Beschriftungen, Legendenbeschriftungen, Titel und die Namen der Achse zu ändern, weil sie nicht wissen, dass es möglich ist, Tabellen in R zu laden, die Leerzeichen enthalten " ". Sie können dies jedoch tun, um Zeit zu sparen oder die Größe Ihres Codes zu verringern, indem Sie die Trennzeichen angeben, wenn Sie eine Tabelle laden, die beispielsweise durch Tabulatoren (oder ein anderes Trennzeichen als das Standardtrennzeichen oder ein einzelnes Leerzeichen) begrenzt ist:

read.table(sep = '\t')

oder indem Sie die Standardladeparameter des CSV-Formats verwenden:

read.csv()

Dies bedeutet, dass Sie den Namen direkt "NEW LEGEND TITLE"als Spaltennamen (Kopfzeile) in Ihrer ursprünglichen Datendatei behalten können, um zu vermeiden, dass in jedem Diagramm ein neuer Legendentitel angegeben wird.

Nakx
quelle
-1

ggplot(df) + labs(legend = '<legend_title>')

Matthew Park
quelle