2014-04-09 14 views
5

Với dữ liệu của tôi:Làm cách nào để sử dụng mã R sau để tái tạo lô sau bằng gói ggplot2?

Row | Year | SchoolID | SchoolName | BudgetArea |PaymentPerStudent 

001 2011  ABC  PS #1   Staff   12000     
002 2012  ABC  PS #1   Staff   10000 
003 2011  ABC  PS #1   Lunch   22000 
004 2012  ABC  PS #1   Lunch   18000 
005 2011  DEF  PS #2   Staff   80000 
006 2012  DEF  PS #2   Staff   65000 
007 2013  DEF  PS #2   Staff   50000 
008 2011  DEF  PS #2   Lunch   23000 
009 2012  DEF  PS #2   Lunch   34000 
010 2013  DEF  PS #2   Lunch   28000 
011 2011  GHI  PS #3   Staff    9000 
012 2012  GHI  PS #3   Staff   10000 
013 2013  GHI  PS #3   Staff   12000 
014 2011  GHI  PS #3   Lunch   22000 
015 2012  GHI  PS #3   Lunch   17000 
016 2013  GHI  PS #3   Lunch   18000 

Tôi muốn để tái tạo như sau:

Desired ggplot2

Source for plot and R code

đâu:

1) hạng A ..... Lớp N giá trị này được thay thế bằng "SchoolName" giá trị

2) Các giá trị Group (Táo, chuối, vv) được thay thế bằng các giá trị "Diện tích ngân sách" (Nhân viên, Bữa trưa, v.v ..)

3) Tỷ lệ Các giá trị ngon được thay thế bằng các giá trị "PaymentPerStudent".

Chỉnh sửa (2014/04/09): Tôi đã thử những điều sau đây, với sự đóng góp của Jaap (xem dưới đây):

ggplot(data=Rates_2, aes(x=factor(Year), y=PaymentPerStudent/max(PaymentPerStudent), 
         group=BudgetArea, shape=BudgetArea, color=BudgetArea)) + 
    geom_line() + 
    geom_point() + 
    labs(title = "Pay rate per student by year, budget area, and school") + 
    scale_x_discrete("Year") + 
    scale_y_continuous("PaymentPerStudent", limits=c(0,1)) + 
    facet_grid(.~SchoolID) 

Tuy nhiên, nó tạo ra những âm mưu sau, "cô đặc":

Condensed Plot

tôi muốn tìm một cách để tách các trường (có lẽ 9 trường mỗi trang) lên các trang khác nhau của cốt truyện dẫn đến trật tự cho âm mưu dễ hiểu.

Xin lưu ý:

1) Khung dữ liệu có chỉ dưới 2.000 dòng dữ liệu, với hơn 400 trường đại diện.

2) Khoảng thời gian, tính theo năm, là từ 2001-2004.

3) Biến PaymentPerStudent dao động từ 10.000 đến 100.000. Tôi muốn rescale biến (nằm giữa 0 và 1) để hoàn thành mục tiêu của tôi sản xuất các lô.

Trả lời

4

Bạn đã quên + trước facet_grid. Dữ liệu mẫu bạn đã cung cấp có năm 2011, 2012 & 2013. Vì vậy, tôi đã giữ nó theo cách đó. Mã này:

ggplot(data=Rates_2, aes(x=factor(Year), y=PaymentPerStudent/max(PaymentPerStudent), 
         group=BudgetArea, shape=BudgetArea, color=BudgetArea)) + 
    geom_line() + 
    geom_point() + 
    labs(title = "Pay rate per student by year, budget area, and school") + 
    scale_x_discrete("Year") + 
    scale_y_continuous("PaymentPerStudent", limits=c(0,1)) + 
    facet_grid(.~SchoolID) 

mang lại cho tôi kết quả này: enter image description here


Để có được một âm mưu riêng biệt cho mỗi trường, bạn có thể sử dụng:

# get the max value so you compare the plots better 
max(Rates_2$PaymentPerStudent) 

# split the dataframe into a list of dataframes for each school 
dfs <- split(Rates_2, Rates_2$SchoolID) 

# make a plot for each school 
lapply(dfs, function(df) ggplot(df, aes(x=factor(Year), y=PaymentPerStudent/80000, 
                group=BudgetArea, shape=BudgetArea, color=BudgetArea)) + 
     geom_line() + geom_point() + 
     labs(title = "Pay rate per student by year, budget area, and school") + 
     scale_x_discrete("Year") + 
     scale_y_continuous("PaymentPerStudent", limits=c(0,1)) 
) 
+0

Với số lượng lớn các trường học, kết quả, sử dụng mã của bạn, tạo ra một âm mưu "ngưng tụ" (vui lòng xem ở trên). – ealfons1

+0

xem câu trả lời cập nhật của tôi, nó là những gì bạn muốn? – Jaap

+0

Có, phản hồi thứ 2 của bạn đã tạo ra kết quả mong muốn. – ealfons1

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