2017-03-06 206 views
0

我有一個情節,我繪製多條線和每個點我想顯示錯誤欄。我需要使用ggplot和dplyr顯示標準錯誤

geom_errorbar(aes(ymax=ymax, ymin=ymin), width=0.25) + xlab('points') 

我的問題是如何更好地使YMAX的YMIN列

目前的數據幀看起來像這樣

data1 <- data.frame(
    group=c("A","A","A","A","B","B","B","B"), 
    x= c(1,2,3,4,5,6,7,8), 
    y = c(1,2,3,4,5,6,7,8), 
    z= c(10,20,30,40,50,60,70,80))  # sample data matrix 

data2 = as.data.frame (data1 %>% group_by(group ) %>% 
    summarise(
    MU_Y= mean(y), 
    upper_limit_Y =MU_Y+(1.96*sd(y, na.rm = TRUE)/sqrt(sum(!is.na(y)))), 
    lower_limit_Y = MU_Y-(1.96*sd(y, na.rm = TRUE)/sqrt(sum(!is.na(y)))), 
    MU_Z= mean(z), 
    upper_limit_Z =MU_Z+(1.96*sd(z, na.rm = TRUE)/sqrt(sum(!is.na(z)))), 
    lower_limit_Z = MU_Z-(1.96*sd(z, na.rm = TRUE)/sqrt(sum(!is.na(z)))) 
) %>% 
    gather(key =Metric, value = Value , 
     #c(MU_Y,lower_limit_Y,upper_limit_Y,MU_Z, upper_limit_Z,lower_limit_Z)) 
      c(MU_Y,MU_Z)) 
) 


    group upper_limit_Y lower_limit_Y upper_limit_Z lower_limit_Z Metric Value 
1  A  3.765175  1.234825  37.65175  12.34825 MU_Y 2.5 
2  B  7.765175  5.234825  77.65175  52.34825 MU_Y 6.5 
3  A  3.765175  1.234825  37.65175  12.34825 MU_Z 25.0 
4  B  7.765175  5.234825  77.65175  52.34825 MU_Z 65.0 

ggplot(data2, aes(x = group, y= Value, group = Metric))+ 
    geom_line()+ 
    geom_point() 

我需要2分新列到數據幀ymin和ymax是適當的上限/下限。所添加應該是這樣的(我沒有複製所有小數)新列:

ymin ymax 
    1.23.. 3.76.. 
    5.23.. 7.76.. 
    12.34.. 37.65.. 
    52... 77.65... 

那麼我能夠繪製每個點的線和誤差條。

ggplot(data2, aes(x = group, y= Value, group = Metric))+ 
    geom_line()+ 
    geom_point() + 
    geom_errorbar(aes(ymax=ymax, ymin=ymin), width=0.25) + 
    xlab('points') 
+0

你爲什麼用as.data.frame包裝你的dply鏈?如果您確實需要使用as.data.frame,請將其添加到鏈的末尾'%>%as.data.frame()' –

+0

謝謝!關於這個問題的任何想法? – user3022875

+0

懷疑聚攏導致更多的問題比它修復 –

回答

1

我想你有你的gather在錯誤的地方。

data2 <- data1 %>% 
    gather(key = Metric, value = Value, -group, -x) %>% 
    group_by(group, Metric) %>% 
    summarise(
    MU = mean(Value), 
    SD = sd(Value, na.rm = TRUE), 
    N = sum(!is.na(Value)), 
    upper_limit = MU + SD/sqrt(N), 
    lower_limit = MU - SD/sqrt(N) 
) 


ggplot(data2, aes(x = group, y= MU, group = Metric))+ 
    geom_line()+ 
    geom_point() + 
    geom_errorbar(aes(ymax=upper_limit, ymin=lower_limit), width=0.25) + 
    xlab('points') 

這是做你想做的嗎?