【发布时间】: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() 或颜色
-
当然可以,但是通过索引不存在的元素来填充它至少是一种不好的做法。
-
嗯,这是最快的方式,不用预先解析数据文件来确定会有多少行。