2014-09-05 55 views
1

我有一個樣本data.frame,其中'正常數據'在這種情況下會產生2個繪圖組(這裏的組由ID分開)。下面你可以找到我的代碼來做到這一點:R:將具有非數值的定性數據添加到繪圖循環中

# Normal Dataframe 
xy <- data.frame(NAME=c("NAME1", "NAME1","NAME1","NAME1","NAME1", "NAME1","NAME1","NAME1","NAME2","NAME2","NAME2","NAME2","NAME2","NAME2","NAME2","NAME2","NAME2","NAME2"),ID=c(47,47,47,47,47,47,47,47,259,259,259,259,259,259,259,259,259,259),YEAR=c(1959,1960,1960,1961,1961,1963,1963,1965,2004,2007,2007,2009,2009,2010,2010,2011,2011,2014),VALUE=c(0,-6,-6,-16,-16,-31,-31,-54,0,-9,-9,-24,-24,-69,-69,-92,-92,-132)) 
xy$ID <-paste(xy$ID, ".png", sep = "") # Add .png Fileextension 
ind <- split(x = xy,f = xy[,'ID']) # index split by ID 

### PLOT 
for(i in 1:length(ind)){ 
    png(names(ind[i]), width=3358, height=2329, res=300) 
    par(mar=c(6,8,6,5)) 
    plot(ind[[i]][,c('YEAR','VALUE')], 
     type='n', 
     main=ind[[i]][1,'NAME'], 
     xlab="Time [Years]", 
     ylab="Length change [m]") 
    # plot axis 
    axis(1, at = seq(1000,2030,10), cex.axis=1, labels=FALSE, tcl=-0.3) 
    # plot points and lines 
    points(ind[[i]][,c('YEAR','VALUE')], type="l", lwd=2) 
    points(ind[[i]][,c('YEAR','VALUE')], type="p", lwd=1, cex=1, pch=21, bg='white') 
    dev.off() 
} 

這工作都不錯,但我也有我想要的田塊要顯示的定性數據。該(樣品)data.frame看起來是這樣的:

data_qual <- data.frame(NAME=c("NAME1","NAME1","NAME2"),ID=c(47,47,259),SURVEY_YEAR=c(1961,1964,2010), REFERENCE_YEAR=c(1960,1962,2006),VALUE_SURYEAR=c("-X","ST","+x"),VALUE_REFYEAR=c("-X","ST","+x")) 

data_qual 
    NAME ID SURVEY_YEAR REFERENCE_YEAR VALUE_SURYEAR VALUE_REFYEAR 
1 NAME1 47  1961   1960   -X   -X 
2 NAME1 47  1964   1962   ST   ST 
3 NAME2 259  2010   2006   +x   +x 

我怎麼能標繪出由REFERENCE_YEAR一行到SURVEY_YEAR和在中間線以上定性VALUE_(如果因爲從VALUE_SURYEARVALUE_REFYEAR採取不要緊他們總是一樣的),並將其併入我的情節循環?有沒有人有一個想法,我怎麼能做到這一點?

這裏是我試圖在第一條曲線做的圖形近似: enter image description here

有我的方式,我可以納入我的陰謀代碼呢?感謝您的幫助!

回答

0

這是一個解決方案。

它基本上是你的代碼,但是我爲ID + png的名字做了一個新的列ID2。然後我使用lines()函數和text()函數創建了一個子循環來添加行和標籤。

xy <-data.frame(NAME = c("NAME1", "NAME1", "NAME1", "NAME1", "NAME1", "NAME1", 
"NAME1", "NAME1", "NAME2", "NAME2", "NAME2", "NAME2", "NAME2", "NAME2", "NAME2", "NAME2", "NAME2", "NAME2"), 
ID=c(47,47,47,47,47,47,47,47,259,259,259,259,259,259,259,259,259,259), 
YEAR=c(1959,1960,1960,1961,1961,1963,1963,1965,2004,2007,2007,2009,2009,2010,2010,2011,2011,2014), 
VALUE=c(0,-6,-6,-16,-16,-31,-31,-54,0,-9,-9,-24,-24,-69,-69,-92,-92,-132)) 


xy$ID2 <-paste(xy$ID, ".png", sep = "") # Add .png Fileextension 
ind <- split(x = xy,f = xy[,'ID']) # index split by ID 

data_qual <- data.frame(NAME= c("NAME1", "NAME1", "NAME2"), 
    ID=c(47,47,259), SURVEY_YEAR=c(1961,1964,2010), 
    REFERENCE_YEAR=c(1960,1962,2006), 
    VALUE_SURYEAR=c("-X","ST","+x"),VALUE_REFYEAR=c("-X","ST","+x")) 

### PLOT 
for(i in 1:length(ind)){ 
    png(names(ind[i]), width=3358, height=2329, res=300) 
    par(mar=c(6,8,6,5)) 
    plot(ind[[i]][,c('YEAR','VALUE')], 
    type='n', 
    main=ind[[i]][1,'NAME'], 
    xlab="Time [Years]", 
    ylab="Length change [m]") 
# plot axis 
axis(1, at = seq(1000,2030,10), cex.axis=1, labels=FALSE, tcl=-0.3) 
# plot points and lines 
points(ind[[i]][,c('YEAR','VALUE')], type="l", lwd=2) 
points(ind[[i]][,c('YEAR','VALUE')], type="p", lwd=1, cex=1, pch=21, bg='white') 
for(j in 1 : nrow(data_qual[data_qual$ID==names(ind[i]),])) { 
lines(
    x=c(data_qual[data_qual$ID==names(ind[i]),]$REFERENCE_YEAR[j], data_qual[data_qual$ID==names(ind[i]),]$SURVEY_YEAR[j]), 
    y=c(min(ind[[i]][,"VALUE"]), min(ind[[i]][,"VALUE"])) 
) 
text(
    x=mean(c(data_qual[data_qual$ID==names(ind[i]),]$REFERENCE_YEAR[j], data_qual[data_qual$ID==names(ind[i]),]$SURVEY_YEAR[j])), 
    y=min(ind[[i]][,"VALUE"]+3), 
    labels=as.character(data_qual[data_qual$ID==names(ind[i]),]$VALUE_SURYEAR[j]) 
) 
} 
dev.off() 

} 
} 
+0

謝謝。這是我一直在尋找的!爲了工作,似乎有一行丟失:ind2 < - split(x = xy,f = xy [,'ID2']) – kurdtc 2014-09-06 21:49:34

+0

@redshoe我想我只是偶然地將'ind'改成了'ind2'。我改回來了,所以現在我想你可以使用'ind'。對於那個很抱歉。 – 2014-09-07 02:26:25

+0

我似乎遇到了您的解決方案的問題,儘管它應該工作,據我瞭解您的代碼。我發佈了一個新的問題,其中包含一些我的實際數據(不是樣本數據):http://stackoverflow.com/questions/25733969/r-adding-qualitative-data-with-non-numerical-values-toa-a- plot-loop-continued如果你能看一看它會很棒嗎?謝謝! – kurdtc 2014-09-08 22:22:07

相關問題