2013-10-16 15 views
1

1個情節我有以下腳本:出圖6系列作爲R

myfunctionSD2 <- function(mydata) { return(sd(mydata,na.rm=TRUE))} 
SDmeas <- tapply(datIn$Measurement,list(as.factor(datIn$Measurement.location),as.factor(datIn$Tube.number)),myfunctionSD2) 
SDMeasurement <- SDmeas[order(as.numeric(rownames(SDmeas))), ] 
dput(SDMeasurement) 
structure(c(0.6555264303958, 0.605687762634627, NA, 0.683435292388886, 
NA, 0.615207645374612, NA, 0.739018717912613, NA, 0.79341715750565, 
NA, 0.769473075819677, NA, NA, NA, NA, NA, 0.6555264303958, 0.605687762634627, 
0.576875822240553, NA, 0.502849025908516, NA, 0.516028792109233, 
NA, 0.486023134629369, NA, 0.489281948774758, NA, 0.464851913610455, 
NA, 0.499546896146173, NA, NA, 0.6555264303958, 0.605687762634627, 
NA, 0.683435292388886, NA, 0.615207645374612, NA, 0.739018717912613, 
NA, 0.79341715750565, NA, 0.769473075819677, NA, NA, NA, NA, 
NA, 0.6555264303958, 0.605687762634627, NA, 0.683435292388886, 
NA, 0.615207645374612, NA, 0.739018717912613, NA, 0.79341715750565, 
NA, 0.769473075819677, NA, 0.773437871034822, NA, NA, NA, 0.6555264303958, 
0.605687762634627, NA, 0.683435292388886, NA, 0.615207645374612, 
NA, 0.739018717912613, NA, 0.79341715750565, NA, 0.769473075819677, 
NA, 0.773437871034822, NA, 0.760395526989779, 0.607323723612999, 
0.6555264303958, 0.605687762634627, NA, 0.683435292388886, NA, 
0.615207645374612, NA, 0.739018717912613, NA, 0.79341715750565, 
NA, 0.769473075819677, NA, 0.773437871034822, NA, 0.760395526989779, 
NA), .Dim = c(17L, 6L), .Dimnames = list(c("1", "3", "4", "5", 
"6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", 
"17", "19"), c("1", "2", "3", "4", "5", "6"))) 

其中明文格式的表看起來像這樣:

  1   2   3   4   5   6 
1 0.6555264 0.6555264 0.6555264 0.6555264 0.6555264 0.6555264 
3 0.6056878 0.6056878 0.6056878 0.6056878 0.6056878 0.6056878 
4   NA 0.5768758  NA  NA  NA  NA 
5 0.6834353  NA 0.6834353 0.6834353 0.6834353 0.6834353 
6   NA 0.5028490  NA  NA  NA  NA 
7 0.6152076  NA 0.6152076 0.6152076 0.6152076 0.6152076 
8   NA 0.5160288  NA  NA  NA  NA 
9 0.7390187  NA 0.7390187 0.7390187 0.7390187 0.7390187 
10  NA 0.4860231  NA  NA  NA  NA 
11 0.7934172  NA 0.7934172 0.7934172 0.7934172 0.7934172 
12  NA 0.4892819  NA  NA  NA  NA 
13 0.7694731  NA 0.7694731 0.7694731 0.7694731 0.7694731 
14  NA 0.4648519  NA  NA  NA  NA 
15  NA  NA  NA 0.7734379 0.7734379 0.7734379 
16  NA 0.4995469  NA  NA  NA  NA 
17  NA  NA  NA  NA 0.7603955 0.7603955 
19  NA  NA  NA  NA 0.6073237  NA 

這裏列頭是Tube.numbers並且行標題是Measurement.locations。

我想在x軸上測量位置和y軸上的標準差(在表中計算值)

我試圖每個管數目(以便6線)繪製成一個圖形用matplot,但我似乎無法繞過必須具有相同數量的行和列的必要性。我寧願做一個循環。

任何人都可以幫助我嗎?

非常感謝!

+0

它可能有助於提供[精確的輸出(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-通過調用'dput(SDmeasurement)'並將其輸出複製到您的問題中獲得的可再現的示例)對象。 – MattLBeck

+1

...或者通過提供一些代碼來創建一個供我們使用的玩具示例。而且,在R中,循環主要用作最後的手段。你絕對不需要在這裏。 –

+0

對不起,傢伙,仍然是初學者,這有助於解決我的問題嗎?謝謝你的回覆! –

回答

2
# Make an empty plot 
plot(0, 0, type="n", xlim=c(1, 19), ylim=range(SDMeasurement, na.rm=TRUE)) 

# Add the lines 
for(i in seq(df)){ 
    y <- SDMeasurement[[i]] 
    lines(which(!is.na(y)), na.omit(y), col=i) 
} 

enter image description here

+0

Hey Backlin感謝您的回覆,但是根據我提供的額外數據,現在是否有更簡單的方法來制定此答案?我不太明白你的劇本... –

+0

現在好了嗎?第一段只是解析數據。這點仍然是:先用'plot(...,type =「n」)'先創建一個空的圖,然後再加上不包含NA值的行。 – Backlin

2

另一種選擇是使用ggplot2得到一個自動的傳說作爲一個額外的(因爲你應該增加它與壘積manullay)。 首先你把數據放在長格式中。我在這裏使用melt來自reshape2。那麼你應該刪除缺失的值。一種選擇是使用complete.cases。在這裏我的代碼:

library(reshape2) 

dat.m <- melt(dat) 
library(ggplot2) 
ggplot(dat.m[complete.cases(dat.m),]) + 
    geom_line(aes(x=Var1,y=value,color=factor(Var2))) + 
    xlab("location")+ylab("Measurement")+ 
    guides(color = guide_legend(title = "Tube numbers")) 

enter image description here