ggplot2 ke bawah dan horizontal


109

Bagaimana cara memindahkan legenda ggplot2 ke dasar plot dan memutarnya secara horizontal?

Kode sampel:

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

Hasil yang diinginkan (perkiraan): masukkan deskripsi gambar di sini


2
Setelah 7 tahun 8 bulan, saya akhirnya menemukan cara mendapatkan hasil yang diinginkan untuk pertanyaan ini :) Gulir ke bawah ke jawaban kedua.
Arthur Yip

Jawaban:


146

Jika ingin memindahkan posisi legenda silahkan gunakan kode berikut:

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

Ini akan memberi Anda hasil yang diinginkan. Legenda di bagian bawah


2
apakah Anda tahu apakah mungkin untuk menggambar bilah legenda kontinu di bagian bawah? (jadi bukan dengan nomor di antara tetapi di atas). Terima kasih.
Janvb

3
Dengan arus ggplot, ini memberi saya peringatan 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). Mengganti optsdengan themekarya.
krlmlr

Ya, saya mengantisipasi ada perubahan dalam cara kerja internalggplot
Shreyas Karnik

10
Merupakan praktik yang buruk untuk menggunakan barang yang didepresiasi. Anda dapat melakukannya dengan menggunakan tema dengan cara yang persis sama:+ theme(legend.position='bottom')
oleh0

sayangnya ada beberapa ambiguitas ketika angka dan warna saling berdampingan; lihat jawaban saya di bawah ini pada beberapa upaya untuk memperbaiki ini.
Arthur Yip

37

Berikut adalah cara membuat hasil yang diinginkan:

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

Dibuat pada 2019-12-07 oleh paket reprex (v0.3.0)


Sunting: tidak perlu lagi opsi yang tidak sempurna ini, tetapi saya meninggalkannya di sini untuk referensi.

Dua opsi tidak sempurna yang tidak memberikan apa yang Anda minta, tetapi cukup dekat (setidaknya akan menyatukan warna).

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

Dibuat pada 2019-02-28 oleh paket reprex (v0.2.1)


Meskipun ini secara teoritis dapat menjawab pertanyaan, akan lebih baik jika menyertakan bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Rohit Gupta

Sekarang saya telah menyempurnakan jawaban saya untuk memberikan dua solusi yang tidak sempurna
Arthur Yip
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.