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