2013-05-15 31 views
13

Trong ggplot2, lệnh p <- qplot(wt, mpg, data=mtcars, colour=factor(cyl)) lấy từ here lô sau một âm mưu phân tán với mỗi điểm màu theo yếu tốggplot2 màu geom_point bởi yếu tố nhưng geom_smooth dựa trên tất cả dữ liệu

Tôi muốn để phù hợp với tất cả các dữ liệu với một geom_smooth không phân biệt của yếu tố nhưng giữ màu sắc của từng điểm theo yếu tố. p + geom_smooth(method="lm") phù hợp tuyến tính trên từng yếu tố. Làm thế nào để tôi làm điều này?

Trả lời

20

Bạn có thể thực hiện điều này khá dễ dàng bằng cách lùi lại từ hàm bao hàm 'qplot' và sử dụng trực tiếp chức năng 'ggplot' và hình học.

ggplot(mtcars, aes(x=wt, y=mpg)) + 
    geom_point(aes(colour=factor(cyl))) + 
    geom_smooth(method="lm") 

demo chart

Bước 1: Thiết lập ban đầu 'ggplot' Cài đặt của bạn. Đây là các cài đặt mà bạn muốn mặc định cho các hàm hình học.

ggplot(mtcars, aes(x=wt, y=mpg)) 

Trong trường hợp này, chúng tôi đang sử dụng dữ liệu 'mtcars' cho tất cả các hình học có 'wt' được gán cho trục x và 'mpg' được gán cho trục y. Bằng cách xác định những điều này ngay từ đầu, chúng tôi sẽ giảm bớt rủi ro gây rối điều gì đó khi sao chép vào các chức năng hình học.

Bước 2: Vẽ hình dạng điểm, sử dụng các thừa số của 'cyl' để tô màu các điểm. Đây là chức năng 'qplot' ban đầu đang làm, nhưng chúng tôi chỉ định rõ hơn một chút.

geom_point(aes(colour=factor(cyl))) 

Bước 3: Vẽ mô hình tuyến tính được làm phẳng. Đây là chính xác những gì OP đã viết trước đây, nhưng bây giờ thẩm mỹ của màu không còn là một phần của mặc định, mô hình rút ra như dự định.

geom_smooth(method="lm") 

Ghim tất cả cùng với + et voila!

Để tham khảo: Bạn có thể chỉ là một cách dễ dàng làm được điều này bằng cách rõ ràng trong mỗi lớp, như vậy:

ggplot() + 
    geom_point(data=mtcars, aes(x=wt, y=mpg, colour=factor(cyl))) + 
    geom_smooth(data=mtcars, method="lm", aes(x=wt, y=mpg)) 
5

Theo ý kiến ​​của tôi, bạn sẽ thấy ggplot dễ dàng hơn nhiều nếu bạn bắt đầu sử dụng hàm ggplot() thay vì qplot. Việc kiểm soát tính thẩm mỹ có ý nghĩa hơn rất nhiều. Trong trường hợp này, bạn chỉ cần xây dựng cơ sở của bạn:

p <- ggplot(mtcars, aes(wt, mpg)) 

Sau đó xây dựng hai geom s trên đầu trang:

p + geom_point(aes(colour = factor(cyl))) + 
    geom_smooth(method = "lm") 

enter image description here

Hãy cho tôi biết nếu đó không phải là những gì bạn đang sau.

+0

Cảm ơn bạn đã trả lời. Tôi sử dụng hàm ggplot() thay vì qplot. Chỉ có ví dụ trên trang web được liên kết đề cập đến nền tảng cho câu hỏi của tôi khá tốt. Điều khiến tôi khó hiểu ở đây là các lớp khác nhau mà bây giờ tôi đã hiểu được – moadeep

+0

Đôi khi tôi gửi câu trả lời, xem ai đó đã viết câu trả lời y hệt và nghĩ, "Có lẽ tôi nên đợi lâu hơn một chút trước khi trả lời ..." – Dinre

+0

Hoặc nhanh hơn :-) – alexwhan

1

Tôi đồng ý với câu trả lời trước từ @alexwhan và @Dinre rằng ggplot() + geom_point (...) + ...là phương pháp tốt nhất cho vấn đề này

Tuy nhiên, nếu bạn chỉ muốn thay đổi giải pháp của bạn thử

p + geom_smooth(method = 'lm', aes(colour = NA), colour = 'magenta') 
Các vấn đề liên quan