2016-11-02 21 views
2

我有許多不同的線的圖,我想爲每一行的每個點添加誤差線。將誤差線添加到多行以在R中的圖上顯示標準偏差

df <- matrix(runif(25),5,5) 
plot(1:5,seq(0,1,1/4),type = 'n') 
mapply(lines,as.data.frame(df),col=cols,pch=1:5,type="o") 

我試過使用arrows函數但沒有成功。

stdev <- matrix(runif(25,0,0.1),5,5) 
A <- as.data.frame(df) + as.data.frame(stdev) 
B <- as.data.frame(df) - as.data.frame(stdev) 
mapply(arrows(1:5,A,1:5,B,col=cols,angle=90,length=0.03, code=3)) 

有什麼建議嗎?

+0

的[添加誤差線可能重複的顯示標準在R的情節偏差](http://stackoverflow.com/questions/15063287/add-error-bars-to-show-standard-deviation-on -a-情節在-R) – epo3

回答

1

arrows是矢量化函數。所以有可能避免撥打mapply。考慮(我也換成matplot你的第一個mapply調用):

## generate example data 
set.seed(0) 
mat <- matrix(runif(25), 5, 5) ## data to plot 
stdev <- matrix(runif(25,0,0.1), 5, 5) ## arbitrary standard error 
low <- mat - stdev ## lower bound 
up <- mat + stdev ## upper bound 

x <- seq(0,1,1/4) ## x-locations to plot against 
## your colour setting; should have `ncol(mat)` colours 
## as an example I just use `cols = 1:ncol(mat)` 
cols <- 1:ncol(mat) 
## plot each column of `mat` one by one (set y-axis limit appropriately) 
matplot(x, mat, col = cols, pch = 1:5, type = "o", ylim = c(min(low), max(up))) 
xx <- rep.int(x, ncol(mat)) ## recycle `x` for each column of `mat` 
repcols <- rep(cols, each = nrow(mat)) ## recycle `col` for each row of `mat` 
## adding error bars using vectorization power of `arrow` 
arrows(xx, low, xx, up, col = repcols, angle = 90, length = 0.03, code = 3) 

enter image description here

1

隨着ggplot:

set.seed(123) # for reproducibility 
data <- as.data.frame(matrix(runif(25),5,5))  # sample data matrix 
se <- as.data.frame(matrix(runif(25,0,0.1),5,5)) # SE matrix 
data$line <- se$line <- as.factor(1:nrow(data)) 
library(reshape2) 
data <- melt(data, id='line') 
se <- melt(se, id='line') 
data$ymax <- data$value + se$value 
data$ymin <- data$value - se$value 
library(ggplot2) 
ggplot(data, aes(variable, value, group=line, color=line)) + geom_point() + geom_line() + 
    geom_errorbar(aes(ymax=ymax, ymin=ymin), width=0.25) + xlab('points') 

enter image description here