2013-10-21 15 views
38

Khi sử dụng ggplot, tôi có thể thiết shape đến 21-25 để có được các hình có cài đặt độc lập cho nội bộ (fill) và biên giới (col) màu sắc, như vậy:kiểm soát độ dày biên giới điểm trong ggplot

df <- data.frame(id=runif(12), x=1:12, y=runif(12)) 
ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21) 

enter image description here

Tuy nhiên, tôi không thể tìm ra cách kiểm soát độ dày của đường viền hình dạng, hoặc đặt chúng hoàn toàn hoặc làm bản đồ thẩm mỹ. Tôi lưu ý rằng nếu tôi đặt một giá trị lwd, nó đè size thẩm mỹ:

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2) 

enter image description here

Làm thế nào để kiểm soát độ dày biên giới?

Trả lời

37

Bắt đầu từ phiên bản 2.0.0 của ggplot2, có một đối số để kiểm soát độ dày đường viền điểm. Từ tệp NEWS.md:

geom_point() đạt thẩm mỹ đột quỵ kiểm soát chiều rộng đường viền của hình dạng 21-25 (# 1133, @SeySayux). kích thước và đột quỵ là phụ gia vì vậy một điểm với kích thước = 5 và đột quỵ = 5 sẽ có đường kính 10mm. (# 1142)

Như vậy, giải pháp đúng cho điều này bây giờ là:

df <- data.frame(id=runif(12), x=1:12, y=runif(12)) 
ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2) 

Output

+1

Bạn có thể thêm đầu ra không? – Thomas

+2

Để tương thích và rõ ràng trong tương lai, sẽ thật tuyệt khi nói "Bắt đầu từ phiên bản x.xx" thay vì "phiên bản mới nhất". – Gregor

13

Nó cảm thấy một chút hacky nhưng bạn có thể thêm một "nền" tập hợp các dấu chấm với kích thước thiết lập để lập bản đồ thẩm mỹ cộng với một số không đổi nhỏ để phóng to biên giới của các dấu chấm. Chơi với hằng số để có chiều rộng đường viền mong muốn.

Bạn cũng sẽ cần phải vô hiệu hóa các huyền thoại kích thước để ngăn chặn nó hiển thị truyền thuyết trên đồ thị ...

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE)+ 
    scale_size(guide = "none")+ 
    geom_point(aes(fill=id, size=id), colour="black", shape=21) 

enter image description here

+2

lẽ hackey, nhưng Hadley tán thành phương pháp này trên Twitter –

+1

@NoamRoss làm bạn có liên kết cho cái đó? –

+3

@ Simon101 https://twitter.com/hadleywickham/status/392440209922469888 –

3

Một giải pháp khác là tạo ra những âm mưu trong R và sau đó xuất khẩu nó vào một tập tin .svg. Sau đó, độ rộng đường truyền có thể được thay đổi bằng phần mềm chỉnh sửa đồ họa vector (ví dụ: Inkscape). Phương pháp này đặc biệt hữu ích khi các điểm dữ liệu chồng lên nhau.

Các vấn đề liên quan