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.