ggplot2 chú giải xuống dưới cùng và ngang


109

Làm cách nào để tôi có thể di chuyển chú giải ggplot2 xuống dưới cùng của cốt truyện và xoay nó theo chiều ngang?

Mã mẫu:

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

Kết quả mong muốn (gần đúng): nhập mô tả hình ảnh ở đây


2
Sau 7 năm 8 tháng, cuối cùng tôi đã tìm ra cách để đạt được kết quả mong muốn cho câu hỏi này :) Cuộn xuống câu trả lời thứ hai.
Arthur Yip

Câu trả lời:


146

Nếu bạn muốn di chuyển vị trí của chú giải, vui lòng sử dụng mã sau:

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

Điều này sẽ cung cấp cho bạn kết quả mong muốn. Chú giải ở dưới cùng


2
bạn không biết có thể vẽ một thanh chú giải liên tục ở phía dưới không? (vì vậy không phải với số ở giữa mà ở trên cùng). cảm ơn.
Janvb

3
Với hiện tại ggplot, điều này cho tôi cảnh báo 'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1). Thay thế optsbằng themecông trình.
krlmlr

Có, tôi dự đoán có sự thay đổi trong hoạt động nội bộ củaggplot
Shreyas Karnik

10
Việc sử dụng các mặt hàng đã khấu hao là một việc làm sai. Bạn có thể làm điều đó bằng cách sử dụng chủ đề theo cùng một cách:+ theme(legend.position='bottom')
trước

Thật không may, có một số sự mơ hồ khi các con số và màu sắc cạnh nhau; hãy xem câu trả lời của tôi bên dưới với một số nỗ lực để cải thiện điều này.
Arthur Yip

37

Đây là cách tạo ra kết quả mong muốn:

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

Được tạo vào ngày 12 tháng 12 năm 2019 bởi gói reprex (v0.3.0)


Chỉnh sửa: không cần những tùy chọn không hoàn hảo này nữa, nhưng tôi để chúng ở đây để tham khảo.

Hai tùy chọn không hoàn hảo không cung cấp cho bạn chính xác những gì bạn yêu cầu, nhưng khá gần nhau (ít nhất sẽ kết hợp các màu lại với nhau).

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

Được tạo vào 2019-02-28 bởi gói reprex (v0.2.1)


Mặc dù về mặt lý thuyết, điều này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo.
Rohit Gupta

Bây giờ tôi đã nâng cao câu trả lời của mình để cung cấp hai giải pháp không hoàn hảo
Arthur Yip
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.