2011-08-25 58 views
8

我有下列R-脚本:绘图功能没有考虑情节类型考虑中的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

什么数据类型是'P1 $ Time'?请将'str(P1)'的结果粘贴到您的问题中。 – Andrie

+0

@Andrie,我更新了有关X结构信息的问题 –

+0

您可能不希望'$ Time'成为一个因素。将它转换成像'?POSIXct'对象那样有用的东西,然后R会做一些更合适的事情。 –

回答

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") 

enter image description here

+0

感谢您的深入解释:) –

0

一个有点哈克解决方案,但它适用于所有的因素,而不是只是时间戳。

变化

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