使用R 3.0.2,我有一个类似于
的数据框head()
0 5 10 15 30 60 120 180 240
YKL134C 0.08 -0.03 -0.74 -0.92 -0.80 -0.56 -0.54 -0.42 -0.48
YMR056C -0.33 -0.26 -0.56 -0.58 -0.97 -1.47 -1.31 -1.53 -1.55
YBR085W 0.55 3.33 4.11 3.47 2.16 2.19 2.01 2.09 1.55
YJR155W -0.44 -0.92 -0.27 0.75 0.28 0.45 0.45 0.38 0.51
YNL331C 0.42 0.01 -0.05 0.23 0.19 0.43 0.73 0.95 0.86
YOL165C -0.49 -0.46 -0.25 0.03 -0.26 -0.16 -0.12 -0.37 -0.34
其中row.names()是变量名,names()是测量时间,值是测量值。它有几千行深。我们称之为tmp
。
我想做一个完整性检查,将每个变量绘制为时间与值,作为一个图上的线图。有什么比使用plot()和lines()天真地绘制每一行更好的方法:
timez <- names(tmp)
plot(x=timez, y=tmp[1,], type="l", ylim=c(-5,5))
for (i in 2:length(tmp[,1])) {
lines(x=timez,y=tmp[i,])
}
上面的粗略答案已经足够了,但我正在寻找一种方法来做到这一点。我最近有一个结论,很抱歉,如果我遗漏了一些明显的东西。我一直这么做。
是否可以转换data.frame,以便在几千个变量中观察每个时间点?或以某种有意义的方式融合() - data.frame?有没有办法在ggplot中使用data()的data.frames或其他东西来处理它?这不是正确的方法,是吗?
亏本。
答案 0 :(得分:3)
我个人更喜欢ggplot2来满足我的所有绘图需求。假设我已经正确理解了你,你可以用reshape2将数据放在长格式中,然后使用ggplot2在同一个图上绘制所有的行:
library(reshape2)
df2<-melt(df,id.var="var")
names(df2)<-c("var","time","value")
df2$time<-as.numeric(substring(df2$time,2))
library(ggplot2)
ggplot(df2,aes(x=time,y=value,colour=var))+geom_line()
答案 1 :(得分:2)
您可以按如下方式使用matplot
DF
## 0 5 10 15 30 60 120 180 240
## YKL134C 0.08 -0.03 -0.74 -0.92 -0.80 -0.56 -0.54 -0.42 -0.48
## YMR056C -0.33 -0.26 -0.56 -0.58 -0.97 -1.47 -1.31 -1.53 -1.55
## YBR085W 0.55 3.33 4.11 3.47 2.16 2.19 2.01 2.09 1.55
## YJR155W -0.44 -0.92 -0.27 0.75 0.28 0.45 0.45 0.38 0.51
## YNL331C 0.42 0.01 -0.05 0.23 0.19 0.43 0.73 0.95 0.86
## YOL165C -0.49 -0.46 -0.25 0.03 -0.26 -0.16 -0.12 -0.37 -0.34
matplot(t(DF), type = "l", xaxt = "n", ylab = "") + axis(side = 1, at = 1:length(names(DF)), labels = names(DF))
xaxt = "n"
禁止绘制x轴注释。 axis
函数允许您指定任何轴的详细信息,在本例中,我们用于指定x轴的标签。
它应该产生如下图。