2012-04-27 14 views
18

Tôi muốn vẽ nhiều dòng R cho bộ dữ liệu này: (x = Năm, y = Value)Nhóm dữ liệu và vẽ nhiều dòng

School_ID Year Value 
A   1998 5 
B   1998 10 
C   1999 15 
A   2000 7 
B   2005 15 

Mỗi trường có dữ liệu trong nhiều năm khác nhau. Tôi muốn có một dòng cho mỗi trường.

Trả lời

25

Hãy tạo một số dữ liệu:

dd = data.frame(School_ID = c("A", "B", "C", "A", "B"), 
    Year = c(1998, 1998, 1999, 2000, 2005), 
    Value = c(5, 10, 15, 7, 15)) 

Sau đó, để tạo ra một âm mưu trong đồ họa cơ bản, chúng ta tạo ra một cốt truyện ban đầu của một nhóm:

plot(dd$Year[dd$School_ID=="A"], dd$Value[dd$School_ID=="A"], type="b", 
    xlim=range(dd$Year), ylim=range(dd$Value)) 

sau đó lặp đi lặp lại thêm vào dòng:

lines(dd$Year[dd$School_ID=="B"], dd$Value[dd$School_ID=="B"], col=2, type="b") 
lines(dd$Year[dd$School_ID=="C"], dd$Value[dd$School_ID=="C"], col=3, type="b") 

Tôi đã sử dụng type="b" để hiển thị các điểm và đường kẻ.

Ngoài ra, sử dụng ggplot2:

require(ggplot2) 
##The values Year, Value, School_ID are 
##inherited by the geoms 
ggplot(dd, aes(Year, Value,colour=School_ID)) + 
    geom_line() + 
    geom_point() 
+0

Cảm ơn bạn, nhưng khi tôi sử dụng chức năng ggplot nó chỉ lô 1 trường. Làm thế nào tôi có thể vẽ một dòng cho mỗi school_id? – dani

+0

Bạn có thể cần cung cấp cho chúng tôi toàn bộ số liệu –

12

Đây có phải là những gì bạn muốn? Bạn cần group = School_id để yêu cầu ggplot2 vẽ các đường riêng biệt cho mỗi trường. Nếu bạn muốn trục ngang để incluude tất cả các năm từ năm 1998 đến năm 2005, sau đó loại bỏ factor trong x = factor(year)

library(ggplot2) 

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

ggplot(data = df, aes(x = factor(Year), y = Value, color = School_id)) +  
    geom_line(aes(group = School_id)) + geom_point() 
+0

Tôi chỉ dường như có một trường được vẽ? – dani

+0

Tôi nhận được hai đường dây trường - cho các trường A và B. Không có đường dây cho trường C vì chỉ có một điểm dữ liệu cho trường C. –

+0

Tôi cũng nhận được hai dòng trường sử dụng mã csgillespie. –

2

Chức năng cốt truyện trong cơ sở R không hỗ trợ nhóm, do đó bạn cần để hiển thị nhóm của bạn từng người một. GGPLOT xử lý nhóm tốt. Tôi cũng khuyên bạn nên xem Trellis XYPLOT cho phép bạn vẽ các nhóm riêng biệt.

Đây là cách bạn có thể tạo ra một âm mưu dòng nhóm cơ bản sử dụng Trellis:

library(lattice) 
rm(list = ls())  # clear objects 
graphics.off()  # close graphics windows 

test = data.frame(x = rep(1:3, each = 2), 
        group = rep(c("Group 1","Group 2"),3), 
        y= c(22,8,11,4,7,5) 
       ) 
xyplot(y~x, 
     type="b", 
     group=group, 
     data=test, 
     auto.key =list(
     points = FALSE, 
     columns=2, 
     lines = TRUE) 
) 
+2

Vui lòng chỉnh sửa câu trả lời trước của bạn thay vì tạo câu trả lời thứ hai. –

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