Modifica delle etichette di legenda (testo) in ggplot


120

Ho passato ore a cercare nella documentazione e su StackOverflow, ma nessuna soluzione sembra risolvere il mio problema. Quando si utilizza ggplotnon riesco a ottenere il testo corretto nella legenda, anche se è nel mio dataframe. Ho provato scale_colour_manual, scale_fill_manualcon valori diversi per labels=come c("T999", "T888")", "cols".

Ecco il mio codice:

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

L'aiuto sarebbe molto apprezzato!


8
Dai un'occhiata a questo tutorial per scoprire quale formato di dati ggplotè più soddisfatto (lungo, non largo) e per avere un'idea della differenza tra mappare un aestetico su una variabile nella aeschiamata e impostarlo all'esterno aes. È necessario che i meltdati siano in un formato lungo e mappati colour(o fill) nella aesvariabile pertinente.
Henrik

Risposte:


146

Il tutorial citato da @Henrik è un'ottima risorsa per imparare a creare grafici con il ggplot2pacchetto.

Un esempio con i tuoi dati:

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

questo risulta in:

inserisci qui la descrizione dell'immagine

Come menzionato da @ user2739472 nei commenti: Se vuoi cambiare solo le etichette del testo della legenda e non i colori dalla tavolozza predefinita di ggplot, puoi usare al scale_color_hue(labels = c("T999", "T888"))posto di scale_color_manual().


@Sathish Come puoi vedere, il titolo dell'asse y è più piccolo del titolo dell'asse x. Le diverse dimensioni vengono utilizzate per illustrare le possibilità e le sue conseguenze. Quindi il codice utilizzato nella risposta è corretto imo.
Jaap

@Sathish Aggiungendo al mio commento precedente: è certamente un'opzione per farlo in questo modo! Dipende tutto da quello che vuoi ottenere ;-)
Jaap

9
Se desideri modificare solo le etichette del testo della legenda e non i colori dalla tavolozza predefinita di ggplot, puoi utilizzare al scale_color_hue(labels = c("T999", "T888"))posto discale_color_manual()
user2739472

1
@ user2739472 Thx & true. Lo aggiungerò alla mia risposta.
Jaap

@Sathish ho un po 'tardi, ma ho corretto l'errore di battitura ora :-)
Jaap

41

I titoli della legenda possono essere etichettati in base a un'estetica specifica .

Ciò può essere ottenuto utilizzando le funzioni guides()o labs()da ggplot2(maggiori informazioni qui e qui ). Ti consente di aggiungere proprietà guida / legenda utilizzando la mappatura estetica.

Ecco un esempio utilizzando il mtcarsset di dati e 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")

inserisci qui la descrizione dell'immagine

Rispondere alla domanda dell'OP utilizzando 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

inserisci qui la descrizione dell'immagine


Non sono d'accordo su questo. Quando si specifica solo il titolo, è più facile specificarlo negli argomenti scale_ ..o labs.
Jaap

Stavo commentando la tua soluzione di 15 minuti fa che ha aggiunto il titolo a scale_color_manual(title="...", ...). Vedo che l'hai modificato per fare riferimento all'estetica del colore in labs(). Offro la mia soluzione come alternativa.
Megatron

A partire da ora, questo sembra modificare la legenda se si tratta di una sfumatura di riempimento per essere più priva di senso.
Max Candocia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.