2011-09-19 31 views
30

Tôi đang cố gắng vẽ ba tập dữ liệu vào cùng một biểu đồ. Một tập dữ liệu sẽ xuất hiện trên biểu đồ dưới dạng một tập hợp các điểm chưa được kết nối, trong khi hai tập dữ liệu kia sẽ xuất hiện dưới dạng các điểm dữ liệu được kết nối. tôi có thể xây dựng biểu đồ sử dụng đoạn mã sau đây:geom_point() và geom_line() cho nhiều tập dữ liệu trên cùng một biểu đồ trong ggplot2

x <- c(1,2,3,4) 
y <- c(1.1,1.2,1.3,1.4) 
y2 <- c(2.1,2.2,2.3,2.4) 
x3 <- c(4,5,6,7) 
y3 <- c(3.1,3.2,3.3,3.2) 
p1 <- data.frame(x=x,y=y) 
p2 <- data.frame(x=x,y=y2) 
p3 <- data.frame(x=x3,y=y3) 

plot(x,y,type="o", col="red") 
points(x3,y3,col="darkgreen",pch=16) 
points(x,y2,type="o",col="blue") 

Như đã trình bày trong các mã, có hai bộ điểm đó được vẽ với loại "o", có nghĩa là các điểm được nối với nhau bằng một dòng, nơi mà một tập hợp các điểm không được kết nối bởi một dòng. Tôi đã cố gắng để tái tạo điều này trong ggplot2. tôi làm như sau trong ggplot2:

zz <- melt(list(p1=p1,p2=p2,p3=p3), id.vars="x") 
ggplot(zz, aes(x.value, color = L1)) 
+ geom_point() + scale_color_manual("Dataset", 
values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 

Làm việc trên, tôi nhận được ba bộ điểm trong ba màu sắc khác nhau, nhưng tất nhiên những điểm màu đỏ và màu xanh are not connected tương ứng. Nếu tôi muốn kết nối các điểm tôi có thể thêm geom_line() để lệnh trên vì vậy mà tôi đã điều sau đây:

ggplot(zz, aes(x.value, color = L1)) + geom_point() + 
scale_color_manual("Dataset", values = 
c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) + geom_line() 

Tất nhiên kết quả này trong các đường kết nối tất cả các điểm, do đó tất cả các điểm màu đỏ được kết nối với nhau, tất cả các điểm màu xanh được kết nối với nhau, và tất cả các điểm màu xanh lá cây được kết nối với nhau. Tuy nhiên, trong khi tôi muốn các điểm màu đỏ và màu xanh được kết nối, tôi không muốn các điểm màu xanh lá cây được kết nối. Có cách nào để làm việc này không?

tôi có thể làm như sau (hoặc tương tự với nó):

ggplot(p2, aes(x,y)) + geom_point(color = "blue") + geom_line(color="blue") 
+ geom_point(data=p3, color = "red") + 
geom_line(data=p3, color="red") + geom_point(data=p1, color = "darkgreen") 

Với lệnh này, các dấu chấm màu đỏ được kết nối, màu xanh được kết nối, và màu xanh lá cây được ngắt kết nối. Tuy nhiên, tôi không muốn làm điều này vì tôi muốn có thể có tất cả các màu điểm xuất hiện trong chú giải (và không có chú thích nào xuất hiện trong giải pháp này).

+1

Có một lỗi nhỏ trong tập lệnh mẫu mà tôi tìm thấy khi cố gắng chạy chúng. Khi nó nói 'aes (x.value, color = L1)' nên là 'aes (x, value, color = L1)'. – pedromanoel

+0

Cảm ơn, câu hỏi của bạn đã giúp tôi. –

Trả lời

35

Bí quyết là mỗi lớp có thể có tập dữ liệu riêng. Vì vậy, bạn phải tập hợp con các dữ liệu để loại trừ L1=="p1" từ dữ liệu cung cấp cho geom_line:

ggplot(zz, aes(x, y=value, color=L1)) + 
    geom_point() + 
    geom_line(data=zz[zz$L1!="p1", ]) + 
    scale_color_manual("Dataset", 
     values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 

enter image description here

9

Bạn có thể ăn một tập dữ liệu khác nhau vào mỗi Geom. Vì vậy, bạn có thể vượt qua trong tập dữ liệu trừ p1 vào lớp geom_line. Một cái gì đó như thế này sẽ hoạt động:

ggplot(zz, aes(x, value, color = L1)) + 
    geom_point() + 
    geom_line(data = subset(zz, L1 %in% c("p2", "p3")), aes(group = L1)) + 
    scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 
Các vấn đề liên quan