ggplot2 Legende nach unten und horizontal

108

Wie kann ich eine ggplot2-Legende an den unteren Rand des Diagramms verschieben und horizontal drehen?

Beispielcode:

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

Gewünschtes (ungefähres) Ergebnis: Geben Sie hier die Bildbeschreibung ein

Tyler Rinker
quelle
2
Nach 7 Jahren und 8 Monaten habe ich endlich herausgefunden, wie ich das gewünschte Ergebnis für diese Frage erzielen kann :) Scrolle nach unten zur zweiten Antwort.
Arthur Yip

Antworten:

146

Wenn Sie die Position der Legende verschieben möchten, verwenden Sie bitte den folgenden Code:

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

Dies sollte Ihnen das gewünschte Ergebnis liefern. Legende unten

Shreyas Karnik
quelle
2
Wissen Sie, ob es möglich ist, unten eine durchgehende Legendenleiste zu zeichnen? (also nicht mit der Nummer dazwischen, sondern oben). Vielen Dank.
Janvb
3
Bei Strom ggplotgibt mir das die Warnung 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). optsDurch themeWerke ersetzen .
krlmlr
Ja, ich gehe davon aus, dass sich die internen Abläufe vonggplot
Shreyas Karnik am
10
Es ist eine schlechte Praxis, abgeschriebene Posten zu verwenden. Sie können es mit Thema genauso tun:+ theme(legend.position='bottom')
bis zum
Leider gibt es einige Unklarheiten, wenn die Zahlen und Farben nebeneinander liegen. siehe meine Antwort unten bei mehreren Versuchen, dies zu verbessern.
Arthur Yip
37

So erstellen Sie das gewünschte Ergebnis:

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

Erstellt am 07.12.2019 durch das reprex-Paket (v0.3.0)


Bearbeiten: Diese unvollständigen Optionen werden nicht mehr benötigt, aber ich lasse sie hier als Referenz.

Zwei unvollständige Optionen, die Ihnen nicht genau das geben, wonach Sie gefragt haben, aber ziemlich nahe beieinander liegen (zumindest die Farben zusammenfügen).

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

Erstellt am 28.02.2019 durch das reprex-Paket (v0.2.1)

Arthur Yip
quelle
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Rohit Gupta
Ich habe jetzt meine Antwort erweitert, um zwei unvollständige Lösungen bereitzustellen
Arthur Yip