2011-08-25 15 views
8

Tengo el siguiente guión R:parcela no tiene tipo de diagrama en cuenta en el lenguaje 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() 

En resultante de datos de imagen PNG para "PortalServer1" se dibuja con puntos y en negro, pero se supone que debe dibujarse con líneas rojas. El otro se dibuja como se espera con líneas verdes. ¿Qué estoy haciendo mal?

EDITAR: Esta es la estructura de la 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

¿Qué tipo de datos es 'P1 $ Time'? Por favor pegue los resultados de 'str (P1)' en su pregunta. – Andrie

+0

@Andrie, He actualizado la pregunta con información sobre la estructura X –

+0

Probablemente no desee '$ Time' como un factor. Conviértalo en algo útil como un objeto '? POSIXct' y luego R hará algo más apropiado con él. –

Respuesta

8

@GavinSimpson ya se comentó sobre cómo resolver su problema. Esto debería haber sido un comentario, pero es demasiado largo. Simplemente explico qué pasó con su parcela con sus datos en su forma original.

Está tramando los datos del tipo factor. En consecuencia, cuando llame a la función plot, el envío del método S3 invocará plot.factor.

Si lee la ayuda para ?plot.factor, verá que el tipo de trazado que obtiene también depende del tipo de su segundo parámetro. Dado que esto también es un factor, en última instancia, su trama se dibuja por spineplot. Por lo tanto, su type="l" es esencialmente ignorado. El color se representa en rojo, aunque ...

ingeniería inversa de sus datos, me sale algo como esto:

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

Gracias por la explicación en profundidad :) –

0

Una solución algo hacky pero funciona para todos los factores, no solo marcas de tiempo.

Cambio

plot(P1$Time, P1$HeapFreePercent, type="l", col="red") 
lines(P2$Time, P2$HeapFreePercent, col="green") 

a

plot(P1$Time, P1$HeapFreePercent, type="n") 
lines(P1$Time, P1$HeapFreePercent, type="l", col="red") 
lines(P2$Time, P2$HeapFreePercent, col="green") 

Este código dibuja primero hay realmente datos, solo eje. Luego dibuja los datos reales utilizando lines, lo que evita llamar al plot.factor

Cuestiones relacionadas