我正在尝试创建一个'前后'线图,显示手术前后血液检查的结果。我有307对数据,因此需要获取线功能,为从术前和术后数据(一列:一名患者)创建的数据矩阵中的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&lt; -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行将耗费大量时间。谢谢你的回复。
答案 0 :(得分: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来阻止一行加入下一行
答案 1 :(得分:1)
您可以使用for loop
执行此操作。 e.g:
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
是初始矩阵beforeandafterdata
中的列(1到6)。
另外,为什么要写x <- c(1*2:307)
?这与2:307
没有什么不同(除非你试图强制进行数字转换,但这不是解决问题的方法)。
all.equal(c(1*2:307), 2:307)
# [1] TRUE