繁体   English   中英

在R语言中,绘图功能不考虑绘图类型

[英]plot function does not take plot type into account in R language

我有以下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 ...

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

在此输入图像描述

一个有点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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM