【问题标题】:plot function does not take plot type into account in R language绘图函数在 R 语言中不考虑绘图类型
【发布时间】:2011-11-03 12:17:42
【问题描述】:

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

生成的“PortalServer1”的 PNG 图像数据用点和黑色绘制,但它应该用红线绘制。另一个按预期用绿线绘制。我做错了什么?

编辑:这是 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 ...

【问题讨论】:

  • P1$Time 是什么数据类型?请将str(P1) 的结果粘贴到您的问题中。
  • @Andrie,我用关于 X 结构的信息更新了问题
  • 您可能不希望将$Time 作为一个因素。将其转换为有用的东西,例如 ?POSIXct 对象,然后 R 会用它做一些更合适的事情。
  • 你的问题让我想到了这个想法,我尝试将 Time 列转换为适当的日期时间,然后它与 plot 函数一起使用,但为什么它在第一次尝试中不起作用?
  • time_format

标签: r plot visualization


【解决方案1】:

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

【讨论】:

  • 感谢您的深入解释 :)
【解决方案2】:

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

改变

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

【讨论】:

    猜你喜欢
    • 2016-01-11
    • 2020-12-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2019-04-28
    • 2014-07-10
    相关资源
    最近更新 更多