2012-07-06 61 views
64

Có cách nào để thay đổi khoảng cách giữa các mục chú giải trong ggplot2 không? Tôi hiện cóCó cách nào để thay đổi khoảng cách giữa các mục chú giải trong ggplot2 không?

legend.position ="top" 

tự động tạo chú thích nằm ngang. Tuy nhiên, khoảng cách của các vật phẩm rất gần nhau và tôi tự hỏi làm thế nào để ngăn cách chúng xa nhau hơn.

+0

Nó sẽ là hữu ích để có một giải pháp hiện tại để này ngay bây giờ rằng 'opts' khấu hao. – geotheory

+0

Ở đây: https://pastebin.com/NnxMiTeH – PatrickT

Trả lời

7

Từ việc Koshke về ggplot2 và blog của mình (Koshke's blog)

... + theme(legend.key.height=unit(3,"line")) # Change 3 to X 
... + theme(legend.key.width=unit(3,"line")) # Change 3 to X 

Loại theme_get() trong giao diện điều khiển để xem thuộc tính huyền thoại có thể chỉnh sửa khác.

+9

Cảm ơn bạn đã gợi ý và liên kết tới blog của Koshke! Thật không may, tuy nhiên điều này dường như thay đổi kích thước của các hộp nhưng không thay đổi khoảng cách giữa các mục. – overflowname

+0

Bạn có thể "giả mạo" nó với một số loại grob xếp chồng. Nhưng tôi không nghĩ đó là cách để có thêm khoảng trống bên trong truyền thuyết. Đây là đề cập duy nhất của nó tôi có thể tìm thấy trong danh sách gửi thư của ggplot2: https://groups.google.com/forum/?fromgroups#!topic/ggplot2/PhkJpP8zJuM –

+1

Tôi có thể sử dụng điều này để tăng khoảng cách giữa các truyền thuyết thành công. Sử dụng các số âm giúp giảm khoảng cách giữa các truyền thuyết. – Nova

28

Bây giờ opts bị phản đối trong ggplot2 gói, chức năng theme nên được sử dụng thay vì:

library(grid) # for unit() 
... + theme(legend.key.height=unit(3,"line")) 
... + theme(legend.key.width=unit(3,"line")) 
+9

Giải pháp này thay đổi chiều cao/chiều rộng của các hộp như trái ngược với khoảng cách giữa chúng. –

30

Một sửa chữa đơn giản mà tôi sử dụng để thêm không gian trong truyền thuyết ngang, chỉ cần thêm khoảng trống trong các nhãn (xem trích dưới đây):

scale_fill_manual(values=c("red","blue","white"), 
        labels=c("Label of category 1   ", 
          "Label of category 2   ", 
          "Label of category 3")) 
+8

Đây là câu trả lời duy nhất cho đến nay có giao dịch với câu hỏi!Điều này có thể hữu ích trong trường hợp có nhiều mục: 'scale_fill_manual (values ​​= values, labels = setNames (dán (nhãn," "), mục nhập))'. – SaschaH

+0

Về mặt kỹ thuật không phải là rất tốt đẹp, đặc biệt là khi bạn phải giới thiệu những không gian đó thành các mức yếu tố, nhưng đó là giải pháp làm việc duy nhất để làm vậy. –

37

tôi nghĩ rằng lựa chọn tốt nhất là sử dụng guide_legend trong guides:

p + guides(fill=guide_legend(
       keywidth=0.1, 
       keyheight=0.1, 
       default.unit="inch") 
    ) 

Lưu ý việc sử dụng default.unit, không cần tải gói grid.

+1

Điều này cần nhiều phiếu bầu, các câu trả lời khác là lỗi thời. –

+2

tính năng này không hoạt động đối với biểu đồ geom_bar – timat

+1

Điều này có thể hoạt động cho truyền thuyết ngang. Tuy nhiên, đối với truyền thuyết dọc của tôi ở bên phải của cốt truyện, điều này chỉ làm tăng chiều cao của khóa, không phải khoảng cách giữa các phím. Các phím huyền thoại của tôi vẫn rất gần nhau. –

6

Cách thêm khoảng cách giữa các mục nhập trong chú giải ngang phải để điều chỉnh lề của phần tử chủ đề legend.text. Ví dụ, để thêm 24pt không gian ở bên phải của mỗi nhãn huyền thoại, cho một đối tượng ggplot p:

p + theme(legend.text = element_text(margin = margin(r = 24, unit = "pt"))) 

Thật không may, trên không hoạt động, vì legend.text không đáp ứng với margin giá trị truyền cho element_text (không phải là legend.title). Đây là lỗi đã biết: https://github.com/tidyverse/ggplot2/issues/1502

Cho đến khi lỗi được khắc phục, tùy chọn đơn giản nhất để thêm dấu cách giữa các mục chú thích có thể là tự dán nhãn bằng dấu cách, như được đề xuất bởi user2568648 and SaschaH.

0

Sử dụng bất kỳ các

legend.spacing = unit(1,"cm") 
legend.spacing.x = unit(1,"cm") 
legend.spacing.y = unit(1,"cm") 
Các vấn đề liên quan