2012-07-13 26 views
7

Tôi muốn làm nổi bật các điểm đã chọn và gặp phải một số hành vi lạ. Đầu tiên một số dữ liệu giả:r - ggplot2 - làm nổi bật các điểm đã chọn và hành vi lạ

a <- 1:50 
b <- rnorm(50) 
mydata <- data.frame(a=a,b=b) 
ggplot(mydata,aes(x=a,y=b)) + geom_point() 

Điều này hoạt động chính xác. Bây giờ, để làm nổi bật một số điểm, tôi thêm một geom_point lớp:

ggplot(mydata[20:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red") 

Lưu ý rằng tôi chỉ hiển thị một loạt hạn chế về dữ liệu ([20:40]). Bây giờ đến hành vi kỳ lạ:

ggplot(mydata[10:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red") 

Thay đổi kích thước của phạm vi lựa chọn, tôi nhận được một lỗi, tạm dịch từ Tiếng Đức: Error...: Arguments implying different number of rows. Kỳ lạ thay, điều này thay đổi theo phạm vi đã chọn. [23:40] sẽ hoạt động, [22:40] sẽ không hoạt động.


Các lỗi bằng tiếng Anh là:

Error in data.frame(x = c(19L, 21L, 22L), y = c(0.28198, -0.6215, : 
    arguments imply differing number of rows: 3, 31 
+0

Tôi hy vọng bạn không nhớ, nhưng tôi đã thêm lỗi bằng tiếng Anh – csgillespie

Trả lời

22

Nếu dữ liệu của bạn là khác nhau giữa các lớp khác nhau, sau đó bạn cần phải xác định dữ liệu mới cho mỗi lớp.

Bạn làm điều này với data=... luận cho mỗi geom mà cần dữ liệu khác nhau:

set.seed(1) 
mydata <- data.frame(a=1:50, b=rnorm(50)) 
ggplot(mydata,aes(x=a,y=b)) + 
    geom_point(colour="blue") + 
    geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) 

enter image description here

+0

Vâng, dữ liệu là không thực sự khác nhau, chỉ là một tập hợp con khác nhau. Nhưng giải pháp này ít nhất là ổn định. Chỉ hoạt động với cách đặt tên rõ ràng ('data = ...'). Nhưng không có lời giải thích cho rằng lỗi lạ ... – lambu0815

+0

@ lambu0815 Thực tế là nó là một tập con khác nhau làm cho nó khác nhau. Bạn đã có lỗi lạ bởi vì bạn đã cố gắng lập bản đồ một thẩm mỹ đơn (x) cho ba yếu tố khác nhau. Thẩm mỹ phải được ánh xạ tới các tên cột. Bạn cũng không phải đặt tên rõ ràng đối số 'data = ...', nhưng sau đó bạn cần phải có các đối số theo đúng thứ tự, tức là 'geom_point (aes (...), data, ...)' – Andrie

0

Một tùy chọn thêm các điều kiện cho cả các thuộc tính, màu sắc và kích thước, bên trong geom_point. Sau đó, chúng tôi kiểm soát thủ công những người sử dụng scale_colour_manualscale_size_manual tương ứng.

set.seed(1) 
mydata <- data.frame(a = 1:50, b = rnorm(50)) 
ggplot(mydata) + 
    geom_point(aes(x = a, y = b, colour = a > 9 & a < 14, size = a > 9 & a < 14)) + 
    scale_colour_manual(values = c("blue", "red")) + 
    scale_size_manual(values =c(1, 4))+ 
    theme(legend.position = "none") 

enter image description here