【问题标题】:Creating "spaghetti" longitudinal plot with smooting / jitter使用平滑/抖动创建“意大利面条”纵向图
【发布时间】:2015-11-01 18:14:28
【问题描述】:

我正在尝试使用由数值组成的数据随着时间的推移创建意大利面条图。这是一个大数据,所以不能在这里粘贴,但是在尝试时

matplot(x,y,type="l",lty=1,col="#00000020")

这是我得到的情节

理想情况下,我希望它看起来像这样

我怎样才能“平滑”线条并减少它们的重叠,就像在下面的情节中一样?如果可能的话,不要使用 ggplot2。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    只需以任意数量的方式平滑数据,some examples

    nr <- 200
    mm <- t(matrix(sample(0:4, nr * 15, replace = TRUE), nr))
    set.seed(1)
    mm[sample(length(mm), nr * 15 / 20)] <- NA
    x <- 1:15
    
    par(mfrow = c(1,2))
    matplot(mm, type = 'l', lty = 1, xlim = c(0,15), ylim = c(-5,10),
            col = adjustcolor('black', alpha.f = .1))
    plot('mm', xlim = c(0,15), ylim = c(-5,10), panel.last = grid(), bty = 'l')
    for (ii in 1:ncol(mm)) {
      dd <- data.frame(y = mm[, ii], x = x)
      lo <- loess(y ~ x, data = dd, na.action = 'na.omit')
      # lo <- loess(mm[, ii] ~ x)
      xl <- seq(min(x), max(x), (max(x) - min(x)) / 1000)
      lines(xl, predict(lo, xl), col = adjustcolor('black', alpha.f = .1))
    }
    

    【讨论】:

    • 这样我只能得到很少的几行。这可能与我在数据框中有很多 NA 的事实有关吗?但我应该能够产生至少与常规重叠线一样多的平滑线。
    • 不知道。提供一个可重现的例子总是更好
    • 我的数据很大,无法粘贴。是否可以用 NA 随机替换大约一半的数字?还能用吗?
    • 我的数据很大,无法粘贴。但是我弄清楚了问题所在,可以在您的示例中向您展示。我可以创建类似的问题(只有几行)我按照nr &lt;- 50 的方式更改您的代码,并以以下方式在mm 中引入NA:mm[,c(4,7,12,13)]&lt;-NA; mm[c(3,5,8,9,10,13),]&lt;-NA。然后情节看起来与我得到的非常相似。
    • @oposum just mm[c(3,5,8,9,10,13),]&lt;-NA 工作正常。另一个就像对所有NAs 进行观察一样,绘制这些没有意义,因为您没有数据,您不能只删除全部为 NA 的行/列吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多