varias superponer studio lineas graficos grafico graficas dispersion r plot

superponer - Trazar datos simples en R



superponer graficas en r (7)

Tengo un archivo separado por comas llamado foo.csv 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

Esencialmente tengo dos preguntas:

1) ¿Cómo trazo la primera columna (eje x) versus la segunda columna (eje y)? Estoy intentando esto (leyendo este sitio ):

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

Pero recupero este error:

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

¿Alguna idea de lo que estoy haciendo mal? Una búsqueda rápida en Google revela a otra persona con el mismo problema pero sin respuesta relevante. ACTUALIZACIÓN: resulta que funciona bien si omito las dos instrucciones de asignación en el medio. ¿Alguna idea de por qué es esto?

La segunda pregunta es bastante fácil después de la primera:

2) ¿Cómo grafico la primera columna (eje x) versus todas las otras columnas en el eje y? Supongo que es bastante fácil una vez que soluciono el primer problema con el que me estoy encontrando, pero soy un poco nuevo para R, así que todavía me estoy volviendo loco.


Estoy lejos de ser un experto en R, pero creo que necesitas un data.frame:

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

¡Al menos trama algo en mi configuración R!

Siguiendo los consejos de la respuesta de luapyad, se me ocurrió esto. Cambié el nombre del encabezado "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

entonces:

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


No necesitas las dos líneas:

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

como escala y serie ya están configurados desde los encabezados en la read.table .

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

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

mientras que la scale de read.table es un vector

5 10 12 15

y la función de plot(scale, serial) espera un vector en lugar de un marco de datos, por lo que solo tiene que hacer

plot(scale, serial)

Un enfoque para trazar 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 haya mejores formas de hacerlo, pero eso está más allá de mi conocimiento actual de R ...


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)


Soy nuevo en R, pero si desea dibujar una escala frente a todas las otras columnas en una parcela, fácil y con un poco de elegancia :) para imprimir o presentar, puede utilizar los paquetes del profesor Hadley Wickham ggplot2 y remodelar.

Instalación:

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

Dibujando 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 podría usar puntos ( geom=”points” ), elegir diferentes colores o formas para diferentes variables puntos ( colours=variable or shape=variable ), ajustar el eje, establecer opciones individuales para cada línea, etc.

Enlace a la documentación en línea .


En tu ejemplo,

plot(scale, serial)

no funcionará porque la scale y la serial son ambos marcos de datos, por ejemplo

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

Puede intentar lo siguiente y usar points() , una vez que se ha generado la trama, para trazar las columnas restantes. Tenga en cuenta que utilicé el parámetro ylim en el plot para acomodar el rango 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'')


Hay una forma simple-r de trazarlo:

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

Usando ese script, solo tienes que escribir:

r -cdps, -k1:2 foo.csv

Para obtener la trama que quieres. Ponlo en el modo detallado (-v) para ver el script R correspondiente.


data <- read.table(...) plot(data$scale,data$serial)