2010-04-02 18 views
11

En R, dado un vectorcómo trazar datos agrupados por un factor, pero no como un diagrama de caja

casp6 <- c(0.9478638, 0.7477657, 0.9742675, 0.9008372, 0.4873001, 0.5097587, 0.6476510, 0.4552577, 0.5578296, 0.5728478, 0.1927945, 0.2624068, 0.2732615) 

y un factor:

trans.factor <- factor (rep (c("t0", "t12", "t24", "t72"), c(4,3,3,3))) 

Quiero crear una trama donde los datos los puntos se agrupan según lo definido por el factor. Entonces las categorías deben estar en el eje x, los valores en la misma categoría deben tener la misma coordenada x.

Simplemente haciendo plot(trans.factor, casp6) hace casi lo que quiero, produce un diagrama de caja, pero quiero ver los puntos de datos individuales.

+0

¿Está vinculado a la trama? Sé que esto es posible usando ggplot2. – PaulHurleyuk

+0

No, en absoluto. ¿En qué paquete está ggplot2? – amarillion

+2

Como Jonathan ha respondido, ggplot2 te permitirá hacer esto, además te permite agitar los puntos para que no se superpongan dos puntos si tienen el mismo valor de y. Visite el sitio web de Hadley http://had.co.nz/ggplot2/ – PaulHurleyuk

Respuesta

12
require(ggplot2) 
qplot(trans.factor, casp6) 
+0

Corto y dulce, gracias :) – amarillion

4

Usted puede hacerlo con ggplot2, utilizando facets. Cuando leo "Quiero crear un gráfico donde los puntos de datos se agrupen como lo define el factor", lo primero que se me vino a la mente fue facets.

Pero en este caso particular, alternativa más rápida debería ser:

plot(as.numeric(trans.factor), casp6) 

y se puede jugar con las opciones gráficas que después (type, fg, bg ...), pero recomiendo quedarse con ggplot2, ya que tiene un código mucho más limpio, una gran funcionalidad, puede evitar sobrerrollar ... etc. etc.

Aprenda a lidiar con los factores. Tienes barplot al evaluar plot(trans.factor, casp6) porque trans.factor era la clase de factor (irónicamente, incluso se dio el nombre de tal Manor) ... y trans.factor, como tal, fue declarado antes una variable continua (numérico) dentro de la función plot() ... por lo tanto, plot() "siente" la necesidad de subconjuntos de datos y dibujar un diagrama de caja basado en cada parte (si declara la variable continua primero, obtendrá un gráfico ordinario, ¿no?). ggplot2, por el contrario, interpreta el factor de una manera diferente ... como , variable numérica "un ordinario" (esto significa sintaxis proporcionada por Jonathan Chang, debe especificar geom cuando se hace algo más complejo en ggplot2) .

Pero, supongamos que tiene una variable continua y un factor, y desea aplicar un histograma en cada parte de la variable continua, definida por niveles de factor. Aquí es donde las cosas se vuelven complicadas con las capacidades del gráfico base.

# create dummy data 
> set.seed(23) 
> x <- rnorm(200, 23, 2.3) 
> g <- factor(round(runif(200, 1, 4))) 

Mediante el uso de gráficos de base (package:graphics):

par(mfrow = c(1, 4)) 
tapply(x, g, hist) 

ggplot2 manera:

qplot(x, facets = . ~ g) 

intenta hacer esto con graphics en una línea de código (punto y coma y funciones personalizadas se consideran ¡trampa!):

qplot(x, log(x), facets = . ~ g) 

¡Ojalá no te haya aburrido hasta la muerte, pero te ayudé!

Saludos cordiales,
aL3xa

3

Usted puede ser capaz de acercarse a lo que desea el uso de gráficos de celosía haciendo:

library(lattice)  
xyplot(casp6 ~ trans.factor, 
     scales = list(x = list(at = 1:4, labels = levels(trans.factor)))) 
3

Creo que hay una mejor solución (I escribieron para un taller hace unos días), pero se me olvidó. Aquí hay un feo sustituto con gráficos básicos. Siéntase libre de anotar el eje x ad libitum. Personalmente, me gusta la solución de Greg.

plot(0, 0, xlim = c(1, 4), ylim = range(casp6), type = "n") 
points(casp6 ~ trans.factor) 
2

n paquete extra necesario

estoy un poco tarde a la fiesta, pero he encontrado que se puede obtener el resultado deseado con mucha facilidad con la trama estándar función - simplemente convierta el factor a un valor numérico:

plot(as.numeric(trans.factor), casp6) 
+0

¡Rápido y fácil! Esto necesita más votos ascendentes – theforestecologist

Cuestiones relacionadas