1

手術前後の血液検査の結果を示す「前後」の折れ線グラフを作成しようとしています。私は 307 組のデータを持っているので、ライン関数を取得して、術前と術後のデータから作成されたデータのマトリックス (1 列: 1 人の患者) の 307 列のそれぞれにラインをプロットする必要があります。だから私はこれを試しました:

ylabel<-"Platelet count (millions/ml)"
preoptpk<-c(100,101,102,103,104,105)
postoptpk<-c(106,107,108,109,110,111) 
preoptpk<-t(matrix(preoptpk))
postoptpk<-t(matrix(postoptpk)) 
preoptpk 
postoptpk
beforeandafterdata<-rbind(preoptpk, postoptpk) 
beforeandafterdata
ylimits<-c(0.8*min(beforeandafterdata,na.rm=TRUE),1.15*max(beforeandafterdata, na.rm=TRUE)) 
ylimits
plot(beforeandafterdata[,1], type = "l", col = "black", xlim = c(0.9, 2.1), 
           ylim = ylimits, ann = FALSE, axes = FALSE)
title(ylab=ylabel, cex.lab=1.4)
axis(1,at=1:2,lab=c("Preop.","Postop."),cex.axis=1.5)
axis(2,labels=TRUE) 
x<-c(1*2:6) 
x
lines(beforeandafterdata[,x],type="l",col="black", 
           xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)

..そして何も起こらなかった。

x<-c(1*2:307) を使用できない理由がわかりません。手動で x を 2、3、4、5、6 と定義すると正常に動作するためです。

x <- 2 x
 lines(beforeandafterdata[,x],type="l",col="black",xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)
x <-3 x
lines(beforeandafterdata[,x],type="l",col="black",xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)
x <-4 x
lines(beforeandafterdata[,x],type="l",col="black",xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)
x<-5 x
lines(beforeandafterdata[,x],type="l",col="black",xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)
x<-6 x
lines(beforeandafterdata[,x],type="l",col="black",xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)
x<-c(1*2:6)

どうすればこれを機能させることができますか?私にはいくつかの変数があり、それぞれに手動で 307 行をプロットするのは非常に時間がかかります。返信ありがとうございます。

4

2 に答える 2

2

あなたの例に近づけようとすると、xy.coords内で使用する必要がありますlines

plot(beforeandafterdata[,1],type="l",col="black",xlim=c(0.9,2.1),ylim=ylimits,
     ann=FALSE,axes=FALSE) 
title(ylab=ylabel, cex.lab=1.4) 
axis(1,at=1:2,lab=c("Preop.","Postop."),cex.axis=1.5)
axis(2,labels=TRUE) 
x<-c(1*2:6) 
x 
lapply(x, function(x){
lines(xy.coords(x=c(1, 2), y=c(beforeandafterdata[,x])), type="l", col="black", 
      xlim=c(0.9,2.1),ylim=ylimits,ann=FALSE)
})

ある行が次の行に結合されるのを防ぐために、lapply が必要です。

于 2013-04-17T13:27:33.253 に答える
1

これを行うには afor loopを使用できます。例えば:

for (x in 2:6) {
  lines(beforendafterdata[,x], ...)
}

reshape2または、およびggplot2パッケージを使用できます。まずmelt、データを次のような長い形式にしますggplot2

library(reshape2)
beforeandafter_melted <- melt(beforeandafterdata)

次に、プロットします。color引数は必要ありませんが、group個々の線を強制的に描画するには重要です。

library(ggplot2)
ggplot(beforeandafter_melted, aes(x=Var1, y=value, color=factor(Var2), group=Var2)) + 
  geom_line()

Var1行 (1 または 2) はどこでVar2、最初の行列の列 (1 から 6)beforeandafterdataです。

また、なぜあなたは書いたのx <- c(1*2:307)ですか?これは2:307(数値変換を強制しようとしている場合を除きますが、それはそれを行う方法ではありません)と違いはありません。

all.equal(c(1*2:307), 2:307)
# [1] TRUE
于 2013-04-17T13:21:06.953 に答える