Bearbeiten von Legenden- (Text-) Beschriftungen in ggplot

120

Ich habe stundenlang in der Dokumentation und in StackOverflow gesucht, aber keine Lösung scheint mein Problem zu lösen. Bei der Verwendung ggplotkann ich nicht den richtigen Text in der Legende finden, obwohl er sich in meinem Datenrahmen befindet. Ich habe versucht scale_colour_manual, scale_fill_manualmit verschiedenen Werten für labels=wie c("T999", "T888")", "cols".

Hier ist mein Code:

T999 <- runif(10, 100, 200)
T888 <- runif(10, 200, 300)
TY <- runif(10, 20, 30)
df <- data.frame(T999, T888, TY)


ggplot(data = df, aes(x=T999, y=TY, pointtype="T999")) + 
       geom_point(size = 15, colour = "darkblue") + 
       geom_point(data = df, aes(x=T888, y=TY), colour = 'red', size = 10 ) + 
       theme(axis.text.x = element_text(size = 20), axis.title.x =element_text(size = 20),   axis.text.y = element_text(size = 20)) +
       xlab("Txxx") + ylab("TY [°C]") + labs(title="temperatures", size = 15) + 
       scale_colour_manual(labels = c("T999", "T888"), values = c("darkblue", "red")) +    theme(legend.position="topright")

Hilfe wäre sehr dankbar!

user3633161
quelle
8
Schauen Sie sich dieses Tutorial an, um herauszufinden, mit welchem ​​Datenformat Sie ggplotam zufriedensten sind (lang, nicht breit), und um ein Gefühl für den Unterschied zwischen der Zuordnung eines aesThetik zu einer Variablen im aesAufruf und der Einstellung außerhalb zu bekommen aes. Sie müssen meltIhre Daten in ein langes Format umwandeln und der entsprechenden Variablen zuordnen colour(oder fill) aes.
Henrik

Antworten:

144

Das erwähnte Tutorial @Henrik ist eine hervorragende Quelle, um zu lernen, wie man mit dem ggplot2Paket Diagramme erstellt.

Ein Beispiel mit Ihren Daten:

# transforming the data from wide to long
library(reshape2)
dfm <- melt(df, id = "TY")

# creating a scatterplot
ggplot(data = dfm, aes(x = TY, y = value, color = variable)) + 
  geom_point(size=5) +
  labs(title = "Temperatures\n", x = "TY [°C]", y = "Txxx", color = "Legend Title\n") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  theme(axis.text.x = element_text(size = 14), axis.title.x = element_text(size = 16),
        axis.text.y = element_text(size = 14), axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20, face = "bold", color = "darkgreen"))

das führt zu:

Geben Sie hier die Bildbeschreibung ein

Wie von @ user2739472 in den Kommentaren erwähnt: Wenn Sie nur die Legenden-Textbeschriftungen und nicht die Farben aus der Standardpalette von ggplot ändern möchten, können Sie scale_color_hue(labels = c("T999", "T888"))stattdessen verwenden scale_color_manual().

Jaap
quelle
@Sathish Wie Sie sehen können, ist der Titel der y-Achse kleiner als der Titel der x-Achse. Die verschiedenen Größen werden verwendet, um die Möglichkeiten und ihre Konsequenzen zu veranschaulichen. Somit ist der in der Antwort verwendete Code imo korrekt.
Jaap
@Sathish Hinzufügen zu meinem vorherigen Kommentar: Es ist sicherlich eine Option, dies so zu tun! Es hängt alles davon ab, was Sie erreichen wollen ;-)
Jaap
9
Wenn Sie nur die Legenden-Textbeschriftungen und nicht die Farben aus der Standardpalette von ggplot ändern möchten, können Sie scale_color_hue(labels = c("T999", "T888"))anstelle vonscale_color_manual()
user2739472
1
@ user2739472 Thx & true. Wird es meiner Antwort hinzufügen.
Jaap
@Sathish Ich habe mich etwas verspätet, aber den Tippfehler jetzt behoben :-)
Jaap
40

Die Legendentitel können durch eine bestimmte Ästhetik gekennzeichnet werden .

Dies kann mit den Funktionen guides()oder labs()von erreicht werden ggplot2(mehr hier und hier ). Mithilfe der ästhetischen Zuordnung können Sie Hilfslinien- / Legendeneigenschaften hinzufügen.

Hier ist ein Beispiel mit dem mtcarsDatensatz und labs():

ggplot(mtcars, aes(x=mpg, y=disp, size=hp, col=as.factor(cyl), shape=as.factor(gear))) +
  geom_point() +
  labs(x="miles per gallon", y="displacement", size="horsepower", 
       col="# of cylinders", shape="# of gears")

Geben Sie hier die Bildbeschreibung ein

Beantwortung der Frage des OP mit guides():

# transforming the data from wide to long
require(reshape2)
dfm <- melt(df, id="TY")

# creating a scatterplot
ggplot(data = dfm, aes(x=TY, y=value, color=variable)) + 
  geom_point(size=5) +
  labs(title="Temperatures\n", x="TY [°C]", y="Txxx") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  guides(color=guide_legend("my title"))  # add guide properties by aesthetic

Geben Sie hier die Bildbeschreibung ein

Megatron
quelle
Da bin ich anderer Meinung. Wenn Sie nur den Titel angeben, ist es einfacher, ihn in den Argumenten scale_ ..oder anzugeben labs.
Jaap
Ich habe Ihre Lösung vor 15 Minuten kommentiert und den Titel hinzugefügt scale_color_manual(title="...", ...). Ich sehe, Sie haben es geändert, um auf die Farbästhetik in Bezug zu nehmen labs(). Ich biete meine Lösung als Alternative an.
Megatron
Ab sofort scheint dies die Legende zu ändern, wenn es sich um einen Füllungsverlauf handelt, der unsinniger ist.
Max Candocia