【问题标题】:r plot will plot colored points, but not colored linesr plot 将绘制彩色点,但不绘制彩色线
【发布时间】:2017-08-11 03:16:28
【问题描述】:

我在 R 中有这样的声明:

plot(net.trips~step, data=subset1, main="Speed = 1.60",type="b", col=subset1$run)

它将在一个带有点的五种不同颜色的图上生成五种不同的时间序列数据图(每个图代表subset1$run 的值)。

但是,当我这样做是为了获得线条:

plot(net.trips~step, data=subset1, main="Speed = 1.60",type="l", col=subset1$run)

我得到了每个数据系列黑色而不是五种不同颜色的图。

为什么会发生这种情况,我该如何纠正?

这是我制作的一些示例数据:

RUN   STEP  NUM.TRIPS  
1     1     2   
1     2     4  
1     3     3  
2     1     5  
2     2     2  
2     3     7  

同一个图上应该有两个数据系列:
数据系列 1:(1,2),(2,4),(3,3)
数据系列2:(1,5),(2,2),(3,7)

如果我使用点 (type="b"),会发生什么情况,数据系列 1 和数据系列 2 将具有不同的颜色。
如果我使用线条(type="l"),数据系列 1 和数据系列 2 都将是黑色的

【问题讨论】:

标签: r plot


【解决方案1】:

如果我猜对了,您想绘制两个数据系列。但是,您正在做的是使用col 参数绘制一个数据系列,如果type='b' 会影响点数。

此外,如果您的样本数据使用的 colnames 与您在 plot 命令中使用的不同(net.trips 与 num.trips),则会令人困惑。

您可以编写一个function,它将您的数据拆分为子数据集并为每个子数据集绘制一条线:

subset1 <- data.frame(
            run = c(1,1,1,2,2,2), 
            step = c(1,2,3,1,2,3), 
            net.trips = c(2,4,3,5,2,7)
           )

plot.subdata <- function(x){
  # create an "empty" plot first
  plot(net.trips~step, data=x, type="n", main="Speed = 1.60")

  # and fill it with dataseries subsetted by run
  for(n in unique(x$run)){
    lines(net.trips~step, data = subset(x, x$run == n), col = n)
  }
}

plot.subdata(subset1)

这不是最优雅的方式,但它会起作用。

【讨论】:

  • 如果要绘制两个以上的系列怎么办?如果有 n 个系列确定了 subset1$run 中的级别怎么办?我可以写一个函数来做到这一点(也许需要一个数据系列列表来绘制相同的行数)?
  • 我已经编辑了我的答案并解释了它是如何工作的。
猜你喜欢
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多