绘制大量线条的更好方法(也许是ggplot)?

时间:2014-03-10 00:25:12

标签: r plot ggplot2

使用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或其他东西来处理它?这不是正确的方法,是吗?

亏本。

2 个答案:

答案 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()

enter image description here

答案 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轴的标签。

它应该产生如下图。

enter image description here