R ggplot分组并绘制多条线

时间:2016-02-26 06:50:35

标签: r ggplot2

大家好,我遇到了将数据分组并在ggplot()中进一步绘制的问题。我的数据由几列组成,其中4个第一列(全部在一起)对应于“样本ID”,另外两列是Zeit(以秒为单位的时间)和Temp。

我需要为每个样本绘制时间与温度的关系图,但是根据他们的ID对它进行分组是非常有意义的,目前我无法弄明白。

示例数据:

> dput(sampledata)
structure(list(a = c(703210L, 703210L, 703210L, 703210L, 703210L, 
                        703210L, 703210L, 703210L, 703210L, 703210L, 703210L, 703210L, 
                        703210L, 703210L, 703210L, 703210L, 703210L, 703210L, 703210L, 
                        703210L), b = c(3988L, 3988L, 3988L, 3988L, 3988L, 3988L, 
                                            3988L, 3988L, 3988L, 3988L, 3988L, 3988L, 3988L, 3988L, 3988L, 
                                            3988L, 3988L, 3988L, 3988L, 3988L), c = c(1L, 1L, 1L, 1L, 
                                                                                            1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L
                                            ), d = c(1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                                          4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L),  Zeit = c(0L, 240L, 300L, 420L, 540L, 546L, 
                                                                                                                                           0L, 180L, 300L, 360L, 540L, 546L, 0L, 180L, 300L, 360L, 540L, 
                                                                                                                                           545L, 0L, 120L), Temp = c(913L, 675L, 570L, 514L, 515L, 355L, 
                                                                                                                                                                     867L, 687L, 575L, 543L, 518L, 437L, 874L, 690L, 577L, 562L, 529L, 
                                                                                                                                                                     455L, 856L, 721L)), .Names = c("a", "b", "c", "d", 
                                                                                                                                                                                                    "Zeit", "Temp"), row.names = 2317:2336, class = "data.frame")

相同的数据,但格式我可以用4列定义样本ID的确切解释我的意思:

          a    b c d Zeit Temp
2317 703210 3988 1 1    0  913
2318 703210 3988 1 1  240  675
2319 703210 3988 1 1  300  570
2320 703210 3988 1 1  420  514
2321 703210 3988 1 1  540  515
2322 703210 3988 1 1  546  355 
2323 703210 3988 1 3    0  867#here starts the new sample (d=3)
2324 703210 3988 1 3  180  687
2325 703210 3988 1 3  300  575
2326 703210 3988 1 3  360  543
2327 703210 3988 1 3  540  518
2328 703210 3988 1 3  546  437
2329 703210 3988 2 4    0  874#here starts the new sample (c=2)
2330 703210 3988 2 4  180  690
2331 703210 3988 2 4  300  577
2332 703210 3988 2 4  360  562
2333 703210 3988 2 4  540  529
2334 703210 3988 2 4  545  455
2335 703210 3988 3 5    0  856#here starts the new sample (c=3 & d=5)
2336 703210 3988 3 5  120  721

依此类推......它恰好发生在& b更改,因此所有这4列都定义了样本ID

我试图在ggplot()轻松地绘制它:

ggplot(sampledata, aes(x=Zeit, y=Temp)) + geom_line(size=1.5) #however it was total chaos

我尝试使用interaction()

ggplot(sampledata, aes(x=Zeit, y=Temp, group=interaction(a,b,c,d))) + geom_line(size=1.5)

我也得到了非常混乱的情节......

任何人都知道如何绘制它?

感谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

您可以在数据集中创建一个id变量,然后在绘图中将颜色作为id。以下是代码:

library(data.table)
library(ggplot2)
sampledata <- data.table(sampledata)
sampledata[, id:=paste(a,b,c,d, sep="_")]

ggplot(sampledata, aes(x=Zeit, y=Temp, color=id)) + geom_line(size=1.5)

使用颜色参数,您可以清楚地看到不同的样本。希望这可以帮助。 :)