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

Tyler Rinker
sumber
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

Shreyas Karnik
sumber
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)

Arthur Yip
sumber
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