2015-10-16 213 views
1

我已經使用errbar在R中產生一個顯示平均值和標準偏差的數字。繪製兩組平均值和標準偏差(使用errbar)

這是我的代碼

errbar(data$Type, data$Mean,data$Mean+data$Std,data$Mean-data$Std, 
     xlab="Type",ylab="Score", ylim=c(0,10)) 

其中(水平)產生平均值和STD的一個情節:

我想以產生用於每個「類型」的圖,其中(類)存在是不止一個平均值/ std顯示在劇情上。所以,我想會是這個樣子(或對每個類型的多個數據點)劇情:

this

我可以使用errbar功能來做到這一點?如果不是,你會如何建議在R中這樣做?

這裏是從dput輸出(數據):

structure(list(Type = structure(c(8L, 5L, 7L, 2L, 1L, 6L, 3L, 4L), 
      .Label = c("A", "B", "C", "D", "E", "G", "H", "R"), 
      class = "factor"), Mean = c(5.26785714285714, 5.41071428571429, 5.92857142857143, 
       6.23333333333333, 6.3, 7.78571428571429, 8.38333333333333, 8.75), 
      Std = c(2.3441094046778, 1.80971508291186, 1.50457178749844, 1.86716617466403, 1.93233759251032, 
       1.3931740974961, 1.06848802832164, 1.00445436503037)), 
      .Names = c("Type", "Mean", "Std"), 
      row.names = c(8L, 5L, 7L, 2L, 1L, 6L, 3L, 4L), class = "data.frame") 

回答

0

這裏的一個ggplot2方法。首先,添加以下到您發佈的數據幀:由Mean

訂單數據幀,然後依次通過轉換爲一個因素鎖定:

data = data[order(data$Mean),] 
data$Type = factor(data$Type, levels=data$Type) 

兩個行添加到數據幀,使我們就可以繪製一個以上的平均/ errorbar每個Type

data = rbind(data, data.frame(Type=c("R","E"), Mean=c(0.5,1.2), Std=c(1.4,1.7))) 

添加分組變量,使之易於繪製多個值對於給定的Type用不同的顏色:

data$group = c(rep("Group 1",8), rep("Group 2", 2)) 

現在的情節:

ggplot(data, aes(x=Type, Mean, colour=group)) + 
    geom_errorbar(aes(ymax=Mean+Std, ymin=Mean-Std), width=0) + 
    geom_point(size=3) + 
    coord_flip() + 
    theme_grey(base_size=15) + 
    guides(colour=FALSE) 

enter image description here

通過使用分組變量的,你也可以「閃避」點的位置中的給定Type,這可能是有用的如果誤差條對於給定值Type重疊。例如:

# Add another row to the data 
data = rbind(data, data.frame(Type="G", Mean=7.5, Std=1.5, group="Group 2")) 

# Dodging function 
pd = position_dodge(width=0.5) 

ggplot(data, aes(x=Type, Mean, colour=group)) + 
    geom_errorbar(aes(ymax=Mean+Std, ymin=Mean-Std), width=0, position=pd) + 
    geom_point(size=3, position=pd) + 
    coord_flip() + 
    theme_grey(base_size=15) + 
    guides(colour=FALSE) 

enter image description here

+0

謝謝 - 真正幫助。 – lily23

+0

我還可以問,有沒有人知道如何強迫這種情節的軸在0到10之間?我嘗試了一些東西,例如ylim = c(0,10),但沒有成功。 – lily23

+0

添加'scale_y_continuous(限制= c(0,10))'。請注意,如果任何數據超出這些限制,ggplot2將會排除它(帶有警告)。要設置小於數據範圍的限制而不排除任何數據,請使用'coord_cartesian(ylim = c(0,10))'。 – eipi10