【问题标题】:R plot legend colors not showing, random plot colorsR绘图图例颜色未显示,随机绘图颜色
【发布时间】:2014-10-12 21:15:07
【问题描述】:

我正在使用一个通用绘图 fxn,它在完成绘图之前不知道它将绘制多少行。数据绘制得很好,但是当我尝试创建图例时,我没有得到颜色。

由于行数未知,我随机为这些行生成颜色;但是,我将颜色存储在数组/向量中。

从我的代码: 我知道这不容易复制,但也不容易被愚弄,因为我已经到了被愚弄并且无法找到问题的地步......

# plot blank plot
plot(1, type="n", xlab="time elapsed [sec]", ylab="Memory Used [MB]", ylim=c(ymin,ymax),   
  xlim=c(xmin,xmax))

 # LOOOOP over column 2 (node)
for(i in 1: length(col2))
{
  if(col2[i] == compareNode)
  {
    #print(paste0("count: ", count))

    # x = time value, y = memory used value for node: compareNode
    x[count] = col1[i]
    y[count] = (col87[i] - col85[i])/1024
    count = count + 1
  }
  else
  {
    # Plot 
    colTest <- sample(colors(), 1)
    mycols <- c(mycols,colTest)
    lines(x, y, col=colTest )

    NODES[nodeCount] = col2[i]
    nodeCount = nodeCount + 1
    # Resets
    compareNode = col2[i]
    x = c()
    y = c()
    count = 1

  }
}

# Plot final line
colTest <- sample(colors(),1)
mycols <- c(mycols,colTest)
lines(x, y, col=colTest)
#print(colors)
legend("topleft", title="LDMS: Memory Used", legend = NODES, col=mycols )
garbage <- dev.off()

在这里尝试一个更好的例子:

loop x times:
  color <- sample(colors(),1)
  mycols <- c(mycosl,color)
  lines(x,y,col=color)
done
lines(x,y,col=color)   # plots last set of data
legend("topright", title="title", legend=NODES, col=mycols)

【问题讨论】:

  • 您的代码有很多问题。如果你事先不知道colors 会持续多久,你如何处理它的初始化?其次,legend() 完全可以使用颜色名称向量,无需使用shQuote() 重新编码。
  • 您实际上应该提供一个我们可以运行和测试的reproducible example。这些随机代码行中的每一行都没有多大意义。
  • @meuleman 颜色可以像任何其他空集颜色 = c() 或颜色
  • 当然可以,但是通过索引不存在的元素来填充它至少是一种不好的做法。
  • 嗯,这是最快的方式,不用预先解析数据文件来确定会有多少行。

标签: r plot legend


【解决方案1】:

尽可能接近您的代码,并假设我们确实不知道要绘制多少行:

mycols <- c();
while (sample(1:100, 1) != 14) {
  col <- sample(colors(), 1);
  mycols <- c(mycols, col);
  ##lines(..., col=col) # plot line
}
legend("topleft", title="LDMS: Memory Used", legend = NODES, col=mycols, lty=1)

更好的是,不要只是从 colors() 中重新采样 1 个元素,而是将 colors() 的输出随机化一次,然后对其进行迭代。这将确保您不会无意中重复使用任何颜色。

【讨论】:

  • 我更喜欢您将每种颜色添加到列表中的方式,但我仍然得到一个空白图例。 :( 我会更新 OP 的更多细节。
  • 添加 lty=1 或您使用的任何行类型。我已经更新了我的答案。
  • 我收到警告:警告分段(x1,y1,x2,y2,...):提供的颜色既不是数字也不是字符;还是没有颜色
  • 我也没有。请在您的问题中添加一个最小(且有效)的示例。
  • 我尝试添加一点——但很难添加任何可以在没有我的数据的情况下轻松运行的内容。傻了我没能找到问题...
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2011-03-14
相关资源
最近更新 更多