Pregunta

Tengo un archivo llamado foo.csv separados por comas que contiene los siguientes datos:

scale, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

Me esencialmente dos preguntas:

1) ¿Cómo trazar la primera columna (eje x) frente a la segunda columna (eje y)? Estoy tratando esto (de la lectura este sitio ):

data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)

Pero me sale este error de vuelta:

Error in stripchart.default(x1, ...) : invalid plotting method

Cualquier idea de lo que estoy haciendo mal? Un rápida búsqueda en Google revela otra persona con el mismo problema pero no hubo respuesta correspondiente. ACTUALIZACIÓN: Resulta que funciona bien si me salto las dos instrucciones de asignación en el medio. ¿Alguna idea de por qué esto es?

La segunda pregunta sigue con bastante facilidad después de la primera:

2) ¿Cómo representar gráficamente la primera columna (eje x) frente a todas las otras columnas en el eje y? Supongo que es bastante fácil una vez que consigo en torno al primer problema que estoy corriendo en, pero soy un poco nuevo en R, así que todavía estoy envolver mi cabeza alrededor de ella.

¿Fue útil?

Solución

No es necesario las dos líneas:

scale <- data[1]
serial <- data[2]

como escala y de serie ya se establecen a partir de las cabeceras en el read.table.

También scale <- data[1] crea un elemento de una data.frame

  data[1]
1     5
2    10
3    12
4    15

mientras que scale de la read.table es un vector

5 10 12 15

y la función plot(scale, serial) espera vectorial en lugar de un hoja.de.datos, por lo que sólo tiene que hacer

plot(scale, serial)

Un enfoque para el trazado de las otras columnas de datos en el eje y:

plot(scale,serial, ylab="")
par(new=TRUE) 
plot(scale,spawn,axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,for., axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,worker,axes=F, ylab="", type="b")

Probablemente hay mejores maneras de hacer esto, pero que está más allá de mi conocimiento actual R ....

Otros consejos

En el ejemplo,

plot(scale, serial) 

no funcionará porque scale y serial son ambas tramas de datos, por ejemplo.

class(scale)
[1] "data.frame"

Se puede probar con el siguiente y el uso points(), una vez que la parcela se ha generado, para trazar las columnas restantes. Nota, usa el parámetro ylim en plot para dar cabida a la gama en la tercera columna.

data <- read.csv('foo.csv', header=T)
plot(data$scale, data$serial, ylim=c(0,750))
points(data$scale, data$spawn, col='red')
points(data$scale, data$for., col='green')
points(data$scale, data$worker, col='blue')

Soy nuevo en R, pero si desea dibujar escala frente a todas las demás columnas en una trama, fácil y con un poco de elegancia :) para la impresión o presentación, es posible utilizar los paquetes del Prof. Hadley Wickham ggplot2 y formar de nuevo.

Instalación:

install.packages(“ggplot2”,dep=T)
install.packages(“reshape”,dep=T)

Dibujo tu ejemplo:

library(ggplot2)
library(reshape)

#read data
data = read.table("foo.csv", header=T,sep=",")

#melt data “scale vs. all”
data2=melt(data,id=c("scale"))
data2

   scale variable      value
1      5   serial   0.000178
2     10   serial   0.156986
3     12   serial   2.658998
4     15   serial 188.023411
5      5    spawn   0.000288
6     10    spawn   0.297926
7     12    spawn   6.059502
8     15    spawn 719.463264
9      5     for.   0.000292
10    10     for.   0.064509
11    12     for.   0.912733
12    15     for. 164.111459
13     5   worker   0.000300
14    10   worker   0.066297
15    12   worker   0.923606
16    15   worker 161.687982

#draw all variables at once as line with different linetypes
qplot(scale,value,data=data2,geom="line",linetype=variable)

También es posible usar puntos (geom=”points”), elegir diferentes colores o formas para diferentes puntos variables (colours=variable or shape=variable), ajuste eje, defina las opciones individuales para cada línea, etc.

documentación en línea .

Estoy lejos de ser un experto R, pero creo que es necesario un hoja.de.datos:

plot(data.frame(data[1],data[2]))

Lo hace al menos trama algo en la configuración R!

Siguiendo el consejo en la respuesta de luapyad, se me ocurrió esto. Me cambió el nombre de la cabecera "escala":

scaling, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

a continuación:

foo <- read.table("foo.csv", header=T,sep=",")
attach(foo)
plot( scaling, serial );

Prueba esto:

data <- read.csv('foo.csv')
plot(serial ~ scale, data)
dev.new()
plot(spawn ~ scale, data)
dev.new()
plot(for. ~ scale, data)
dev.new()
plot(worker ~ scale, data)

Hay una manera sencilla de planear-r es:

https://code.google.com/p/simple-r/

El uso de ese guión, sólo hay que escribir:

r -cdps, -k1:2 foo.csv

Para obtener la gráfica que desea. Ponerlo en el modo detallado (-v) para ver la secuencia de comandos R correspondiente.

data <- read.table(...)
plot(data$scale,data$serial)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top