2012-04-27 30 views
32

Câu hỏi này sau trên từ một đầu question and its answers.dòng Vẽ và thẩm mỹ nhóm trong ggplot2

Đầu tiên một số dữ liệu đồ chơi:

df = read.table(text = 
"School  Year Value 
A   1998 5 
B   1999 10 
C   2000 15 
A   2000 7 
B   2001 15 
C   2002 20", sep = "", header = TRUE) 

Các câu hỏi ban đầu hỏi làm thế nào để vẽ dòng Value năm cho mỗi trường. Các câu trả lời ít nhiều tương ứng với p1 và p2 bên dưới. Nhưng cũng xem xét p3.

library(ggplot2) 

(p1 <- ggplot(data = df, aes(x = Year, y = Value, colour = School)) +  
    geom_line() + geom_point()) 

(p2 <- ggplot(data = df, aes(x = factor(Year), y = Value, colour = School)) +  
    geom_line(aes(group = School)) + geom_point()) 

(p3 <- ggplot(data = df, aes(x = factor(Year), y = Value, colour = School)) +  
    geom_line() + geom_point()) 

Cả p1 và p2 đều thực hiện công việc. Sự khác biệt giữa p1 và p2 là p1 xử lý Year là số trong khi p2 xử lý Year là một yếu tố. Ngoài ra, p2 chứa một thẩm mỹ group trong geom_line. Nhưng khi thẩm mỹ group bị giảm như trong p3, các đường thẳng không được vẽ.

Câu hỏi đặt ra là: Tại sao cần có sự thẩm mỹ group khi biến trục x là một yếu tố nhưng không cần thiết thẩm mỹ group khi biến trục x là số?

enter image description here

Trả lời

40

Trong những lời của Hadley himself:

Điều quan trọng [cho một đồ thị phù hợp với một yếu tố trên trục ngang] là phải tự xác định các nhóm. Bởi ggplot2 mặc định sử dụng sự kết hợp của tất cả các biến phân loại trong cốt truyện để nhóm các geom - không hoạt động cho cốt truyện này bởi vì bạn nhận một dòng riêng cho mỗi điểm. Chỉ định nhóm theo cách thủ công = 1 cho biết bạn muốn một dòng kết nối tất cả các điểm.

Bạn có thể thực sự nhóm các điểm theo những cách rất khác nhau as demonstrated by koshke here

+0

Vì vậy, khi 'x' là số, giả định về nhóm các quan sát bởi các yếu tố không được thực hiện (và có thể không được thực hiện bởi vì rõ ràng ' x' không phải là một yếu tố). Tôi đoán những gì đã gây nhầm lẫn cho tôi trong trường hợp của số 'x' là nó vẫn có thể nhận được một dòng bằng cách chỉ định' group = 1' nhưng nhiều dòng không có đặc tả 'nhóm'. –

+0

Vâng, @Sandy Muspratt, trong trường hợp thứ hai của bạn, số 'x' cung cấp một thứ tự tự nhiên nhưng không có yếu tố để nhóm theo, do đó các biến phân loại khác đi vào chơi. Phải mất một thời gian để quấn đầu của tôi xung quanh nó, bây giờ nó chỉ là hợp lý. (Cảm ơn bạn đã chấp nhận). – gauden

+0

Cảm ơn bạn đã làm rõ –

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