30 votos

Lo que es una buena manera de utilizar R para hacer un diagrama de dispersión que separa los datos por el tratamiento?

Yo soy muy nuevo con R y estadísticas en general, pero necesito hacer un diagrama de dispersión que creo que podría estar más allá de su propia capacidad.

Tengo un par de vectores de observaciones y quiero hacer un diagrama de dispersión con ellos, y cada pareja cae en una de tres categorías. Me gustaría hacer un diagrama de dispersión que separa cada categoría, ya sea por el color o por el símbolo. Creo que esto sería mejor que la generación de tres diferentes diagramas de dispersión.

Tengo otro problema con el hecho de que en cada una de las categorías, hay grandes grupos en un punto, pero los grupos son más grandes en un grupo que en los otros dos.

¿Alguien sabe una buena manera de hacer esto? Los paquetes que debo instalar y aprender a usar? Alguien hecho algo similar?

Gracias

53voto

cbeleites Puntos 12461

grandes grupos: si la sobreimpresión es un problema, usted podría utilizar una menor alpha, por lo que solo los puntos débiles, pero overprining hace más intenso el color. O se cambia a 2d histogramas o estimaciones de densidad.

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    density
    Quizás quieras faceta de este...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    hexbin
    Mientras que usted puede procude esta parcela también sin restricciones, la prining el fin de la Especie influnces la imagen final.

  • Usted puede evitar esto si usted está dispuesto a tener en tus manos un poco sucias (= link a la explicación y código) y calcular la mezcla de color para los hexágonos: enter image description here

  • Otra cosa útil es el uso de (hex)contenedores para zonas de alta densidad, y la parcela individual para otras partes:

    ggplot (df, aes (x = date, y = t5)) + 
      stat_binhex (data = df [df$t5 <= 0.5,], bins = nrow (df) / 250) +
              geom_point (data = df [df$t5 > 0.5,], aes (col = type), shape = 3) +
      scale_fill_gradient (low = "#AAAAFF", high = "#000080") +
      scale_colour_manual ("response type", 
        values = c (normal = "black", timeout = "red")) + 
      ylab ("t / s")
    

    enter image description here


En aras de la exhaustividad de la conspiración de los paquetes, permítanme mencionar también lattice:

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code>xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)</code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code>xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)</code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code>xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)</code>

22voto

Brettski Puntos 5485

Este es uno de los problemas clásicos de los 'Iris' conjunto de datos. Este es un enlace a un conjunto de trazado de proyectos basados en que el conjunto de datos con código R, que usted puede ser capaz de adaptarse a su problema.

Aquí es un enfoque que utiliza con la base de R en lugar de un paquete de complemento.

plot(iris$Petal.Length, iris$Petal.Width, pch=21, 
     bg=c("red","green3","blue")[unclass(iris$Species)], 
     main="Edgar Anderson's Iris Data")

que produce esta figura:

enter image description here

A partir de ahí, dependiendo de su parcela, usted puede empezar a modelar con alfa/niveles de transparencia para permitir overplotting, etc. pero me gustaría construir a partir de un gráfico muy básico primero.

Si bien hay muchas razones para seguir con la base de R, otros paquetes de simplificar el trazado. La separación de los datos por una característica distintiva es uno de los puntos fuertes de la ggplot2 y celosía de paquetes. ggplot2 hace particularmente atractivo visualmente parcelas. Ambos paquetes se demuestra en la respuesta por @cbeleites.

16voto

Issac Kelly Puntos 3014

O con ggplot2:

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + facet_grid(~Species)

Que produce

enter image description here

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X