ggplot2 göstergesini aşağı ve yatay


109

Bir ggplot2 lejantını arsanın altına nasıl taşıyabilir ve yatay olarak döndürebilirim?

Basit kod:

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

İstenen (yaklaşık) sonuç: görüntü açıklamasını buraya girin


2
7 yıl 8 ay sonra, nihayet bu soru için istenen sonucu nasıl elde edeceğimi anladım :) İkinci cevaba ilerleyin.
Arthur Yip

Yanıtlar:


146

Göstergenin konumunu taşımak istiyorsanız, lütfen aşağıdaki kodu kullanın:

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

Bu size istenen sonucu vermelidir. Altta gösterge


2
Altta sürekli bir gösterge çubuğu çizmenin mümkün olup olmadığını biliyor musunuz? (yani aradaki sayı değil, üstte). Teşekkürler.
Janvb

3
Akımla ggplotbu beni uyarıyor 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). Eserler optstarafından değiştiriliyor theme.
krlmlr

Evet ben değişikliğinin iç işleyişte olduğunu tahminggplot
Shreyas Karniksismik

10
Amortismana tabi tutulan kalemleri kullanmak kötü bir uygulamadır. Aynı şekilde temayı kullanarak da yapabilirsiniz:+ theme(legend.position='bottom')
0

ne yazık ki sayılar ve renkler yan yana geldiğinde bazı belirsizlikler var; bunu geliştirmek için birkaç girişimde aşağıdaki cevabıma bakın.
Arthur Yip

37

İstenilen sonucun nasıl oluşturulacağı aşağıda açıklanmıştır:

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

2019-12-07 tarihinde reprex paketi (v0.3.0) tarafından oluşturuldu


Düzenleme: artık bu kusurlu seçeneklere gerek yok, ancak bunları referans için burada bırakıyorum.

Size tam olarak istediğiniz şeyi vermeyen, ancak oldukça yakın olan (en azından renkleri bir araya getirecek olan) iki kusurlu seçenek.

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

Reprex paketi (v0.2.1) tarafından 2019-02-28 tarihinde oluşturuldu


Bu teorik olarak soruya cevap görülebilir fakat tercih edildiğini burada cevabın temel parçalarını kapsadığı ve başvuru için bağlantı sağlar.
Rohit Gupta

Şimdi cevabımı iki kusurlu çözüm sunmak için geliştirdim
Arthur Yip
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.