【问题标题】:R ggplot grouping and plotting multiple linesR ggplot 分组和绘制多条线
【发布时间】:2016-02-26 15:15:35
【问题描述】:

大家好,我在将数据分组并在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")

相同的数据,但格式我可以准确解释定义样本 ID 的 4 列的含义:

          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

等等...a & 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)

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

有人知道我如何绘制它吗?

感谢您的建议!

【问题讨论】:

  • 也许您可以创建额外的列,将您的 4 列连接成一个 ID 列? (paste)
  • 嘿,我刚刚尝试过,但仍然很混乱。问题是当我groupggplot 中的一个新列时,时间会混淆,而不是从 0 开始的每条绘图曲线(如 0 秒),都混在一起,毫无意义
  • 试着用图片展示你得到的和想要的......

标签: r ggplot2


【解决方案1】:

您可以在数据集中创建一个 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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多