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


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


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)


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.