legenda ggplot2 in basso e in orizzontale


109

Come posso spostare una legenda ggplot2 in fondo alla trama e ruotarla orizzontalmente?

Codice di esempio:

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend())

Risultato desiderato (approssimativo): inserisci qui la descrizione dell'immagine


2
Dopo 7 anni e 8 mesi, ho finalmente capito come ottenere il risultato desiderato per questa domanda :) Scorri verso il basso fino alla seconda risposta.
Arthur Yip

Risposte:


146

Se vuoi spostare la posizione della legenda usa il seguente codice:

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
    theme(legend.position="bottom")

Questo dovrebbe darti il ​​risultato desiderato. Legenda in basso


2
sai se è possibile disegnare una legenda continua in basso? (quindi non con il numero in mezzo ma sopra). Grazie.
Janvb

3
Con la corrente ggplot, questo mi dà l'avvertimento 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). Sostituzione optscon themeopere.
krlmlr

Sì, prevedo che ci sarà un cambiamento nel funzionamento interno diggplot
Shreyas Karnik

10
È una cattiva pratica utilizzare elementi ammortizzati. Puoi farlo usando il tema esattamente allo stesso modo:+ theme(legend.position='bottom')
entro il

purtroppo c'è una certa ambiguità quando i numeri e i colori sono fianco a fianco; vedi la mia risposta di seguito in diversi tentativi di migliorare questo.
Arthur Yip

37

Ecco come creare il risultato desiderato:

library(reshape2); library(tidyverse)
melt(outer(1:4, 1:4), varnames = c("X1", "X2")) %>%
ggplot() + 
  geom_tile(aes(X1, X2, fill = value)) + 
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom",
        legend.spacing.x = unit(0, 'cm'))+
  guides(fill = guide_legend(label.position = "bottom"))

Creato il 07/12/2019 dal pacchetto reprex (v0.3.0)


Modifica: non sono più necessarie queste opzioni imperfette, ma le lascio qui come riferimento.

Due opzioni imperfette che non ti danno esattamente quello che stavi chiedendo, ma piuttosto vicine (almeno metteranno insieme i colori).

library(reshape2); library(tidyverse)
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
 theme(legend.position="bottom", legend.direction="vertical")

p1 + scale_fill_continuous(guide = "colorbar") + theme(legend.position="bottom")

Creato il 28/02/2019 dal pacchetto reprex (v0.2.1)


Sebbene questo possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento per riferimento.
Rohit Gupta

Ora ho migliorato la mia risposta per fornire due soluzioni imperfette
Arthur Yip,
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.