ggplot2 ตำนานด้านล่างและแนวนอน


109

ฉันจะย้ายคำอธิบาย ggplot2 ไปที่ด้านล่างสุดของพล็อตและเปิดในแนวนอนได้อย่างไร

โค้ดตัวอย่าง:

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

ผลลัพธ์ที่ต้องการ (โดยประมาณ): ป้อนคำอธิบายภาพที่นี่


2
หลังจาก 7 ปี 8 เดือนในที่สุดฉันก็ค้นพบวิธีที่จะได้ผลลัพธ์ที่ต้องการสำหรับคำถามนี้ :) เลื่อนลงไปที่คำตอบที่สอง
Arthur Yip

คำตอบ:


147

หากคุณต้องการย้ายตำแหน่งของคำอธิบายแผนภูมิโปรดใช้รหัสต่อไปนี้:

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

สิ่งนี้ควรให้ผลลัพธ์ที่ต้องการ ตำนานที่ด้านล่าง


2
คุณรู้หรือไม่ว่าสามารถวาดแถบคำอธิบายแผนภูมิต่อเนื่องที่ด้านล่างได้หรือไม่? (ไม่ใช่ด้วยตัวเลขที่อยู่ระหว่าง แต่อยู่ด้านบน) ขอบคุณ.
Janvb

3
ด้วยในปัจจุบันนี้จะช่วยให้ฉันเตือนggplot 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)แทนที่optsด้วยthemeผลงาน
krlmlr

ใช่ฉันคาดว่าจะมีการเปลี่ยนแปลงในการทำงานภายในของggplot
Shreyas Karnik

10
การใช้รายการที่คิดค่าเสื่อมราคาเป็นวิธีปฏิบัติที่ไม่ดี คุณสามารถทำได้โดยใช้ธีมในลักษณะเดียวกัน:+ theme(legend.position='bottom')
ภายใน

น่าเสียดายที่มีความคลุมเครือเมื่อตัวเลขและสีอยู่เคียงข้างกัน ดูคำตอบของฉันด้านล่างด้วยความพยายามหลายครั้งเพื่อปรับปรุงสิ่งนี้
Arthur Yip

38

นี่คือวิธีสร้างผลลัพธ์ที่ต้องการ:

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 โดยแพ็คเกจ reprex (v0.3.0)


แก้ไข: ไม่จำเป็นต้องมีตัวเลือกที่ไม่สมบูรณ์เหล่านี้อีกต่อไป แต่ฉันทิ้งไว้ที่นี่เพื่อใช้อ้างอิง

สองตัวเลือกที่ไม่สมบูรณ์ที่ไม่ได้ให้สิ่งที่คุณต้องการ แต่ค่อนข้างใกล้เคียง (อย่างน้อยก็จะใส่สีเข้าด้วยกัน)

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

สร้างเมื่อ 2019-02-28 โดยแพ็คเกจ reprex (v0.2.1)


ในขณะนี้อาจตอบคำถามในทางทฤษฎีได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์สำหรับการอ้างอิง
Rohit Gupta

ตอนนี้ฉันได้ปรับปรุงคำตอบของฉันเพื่อหาวิธีแก้ปัญหาที่ไม่สมบูรณ์สองวิธี
Arthur Yip
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.