【问题标题】:Is there a better way to plot multicolor lines in R than splitting the data?有没有比拆分数据更好的方法在 R 中绘制多色线?
【发布时间】:2014-03-17 04:22:19
【问题描述】:

我的时间序列的连续部分正在接受不同的处理,我想分别为连接每个部分的观察结果的线着色。

例如,在处理 A 的系列中,我会有一条红线,而在处理 B 的后续系列中,我会有一条蓝线。

plot(response, type="l",col="treatment") 失败 - 所有观察都用相同颜色的线连接。

此列表主机帖子建议仅通过处理拆分数据,然后将每个子集分别绘制在同一图上。 (http://r.789695.n4.nabble.com/Can-R-plot-multicolor-lines-td791081.html)。

有没有更优雅的方式?

【问题讨论】:

    标签: r


    【解决方案1】:

    使用Map 的替代方法可以避免手动绘制线段:

    dat <- data.frame(treatment=rep(LETTERS[1:2],3:4),
                      response=c(6,5,2,1,5,6,7),time=1:7)
    
    plot(response ~ time, data=dat, type="n")
    Map(
      function(x) lines(response ~ time, data=x, col=x$treatment),
      split(dat, dat$treatment)
    )
    

    【讨论】:

      【解决方案2】:

      有两种流行的更优雅的方式。一种是使用ggplot2 包。如果没有更多信息,除了查看各个地方的帮助或示例之外,很难为您提供建议。另一种是查看函数matplot。这将要求您首先将数据重组为矩阵,但它可以轻松地做您想做的事情。请记住,虽然它在帮助中说“绘制一个矩阵的列与另一个矩阵的列”,但 x 轴矩阵可以是与包含行信息的矩阵的一列长度相同的向量。该函数只会回收 x 向量。

      【讨论】:

      • matplot 可以为矩阵列中的每个 y 分别取 x
      • 但是每个 x 必须是相同的长度,因为 matplot 不将列表作为输入,只有矩阵。
      • 列可以用NA填充,所以matplot可以处理不等长的向量。
      • 好的,但这确实需要进行相当多的数据操作。
      猜你喜欢
      • 1970-01-01
      • 2011-12-01
      • 2020-06-05
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多