我有以下R脚本:
X <- read.table("/tmp/run178/data/monitor/portal_free_heap_monitor.log", header=T, sep=";")
P1 <- subset(X, Server=="PortalServer1")
P2 <- subset(X, Server=="PortalServer2")
png("mygraph.png")
plot(P1$Time, P1$HeapFreePercent, type="l", col="red")
lines(P2$Time, P2$HeapFreePercent, col="green")
q()
在生成的PNG图像中,“PortalServer1”的数据用点和黑色绘制,但它应该用红线绘制。另一个用绿线预期绘制。我做错了什么?
编辑:这是X的结构:
> str(X)
'data.frame': 5274 obs. of 3 variables:
$ Time : Factor w/ 2654 levels "2011.08.24 14:39:29",..: 1 1 2 2 3 3 4 4 5 5 ...
$ Server : Factor w/ 2 levels "PortalServer1",..: 1 2 1 2 1 2 1 2 1 2 ...
$ HeapFreePercent: int 42 49 41 49 41 49 41 49 41 49 ...
答案 0 :(得分:8)
@GavinSimpson已经就如何解决问题发表了评论。这应该是一个评论,但太长了。我只是用原始形式的数据解释你的情节发生了什么。
您正在绘制factor
类型的数据。因此,当您调用函数plot
时,S3方法调度将调用plot.factor
。
如果您阅读?plot.factor
的帮助,您会注意到您获得的绘图类型也取决于您的第二个参数的类型。由于这也是一个因素,最终你的情节由spineplot
绘制。因此,type="l"
基本上被忽略了。颜色用红色绘制,但是......
对数据进行逆向工程,我得到类似的结果:
X <- data.frame(
Time = sort(sample(letters, 100, replace=TRUE)),
Server = sample(c("PortalServer1", "PortalServer2"), 100, replace=TRUE),
HeapFreePercent = runif(100))
str(X)
P1 <- subset(X, Server=="PortalServer1")
P2 <- subset(X, Server=="PortalServer2")
plot(P1$Time, P1$HeapFreePercent, type="l", col="red")
lines(P2$Time, P2$HeapFreePercent, col="green")
答案 1 :(得分:0)
一种有点hacky的解决方案,但它适用于所有因素,而不仅仅是时间戳。
更改
plot(P1$Time, P1$HeapFreePercent, type="l", col="red")
lines(P2$Time, P2$HeapFreePercent, col="green")
到
plot(P1$Time, P1$HeapFreePercent, type="n")
lines(P1$Time, P1$HeapFreePercent, type="l", col="red")
lines(P2$Time, P2$HeapFreePercent, col="green")
此代码首先不绘制实际数据,只绘制轴。然后,它使用lines
绘制实际数据,这可以避免调用plot.factor