varias superponer studio modificar lineas graficos graficas ejes r colors plot r-factor

studio - superponer graficas en r



Dibujo de color por factor en R (6)

Como Maiasaura, prefiero ggplot2 . El manual de referencia transparente es una de las razones. Sin embargo, esta es una manera rápida de hacerlo.

require(ggplot2) data(diamonds) qplot(carat, price, data = diamonds, colour = color) # example taken from Hadley''s ggplot2 book

Y porque alguien famoso dijo, las publicaciones relacionadas con la trama no están completas sin la trama, aquí está el resultado:

Aquí hay un par de referencias: ejemplo de qplot.R , tenga en cuenta que básicamente utiliza el mismo conjunto de datos de diamante que utilizo, pero recorta los datos antes para obtener un mejor rendimiento.

http://ggplot2.org/book/ el manual: http://docs.ggplot2.org/current/

Estoy haciendo un diagrama de dispersión de dos variables y me gustaría colorear los puntos con una variable de factor. Aquí hay un código reproducible:

data <- iris plot(data$Sepal.Length, data$Sepal.Width, col=data$Species)

Todo esto está muy bien, pero ¿cómo puedo saber qué factor ha sido coloreado de qué color?


Conozco dos formas de colorear los puntos de la parcela por factor y luego generar automáticamente una leyenda correspondiente. Daré ejemplos de ambos:

  1. Usando ggplot2 (generalmente más fácil)
  2. Uso de la funcionalidad de trazado incorporada de R en combinación con la función colorRampPallete (más complicado, pero muchas personas prefieren / necesitan los recursos de trazado incorporados de R)

Para ambos ejemplos, usaré el conjunto de datos de diamantes de ggplot2. Usaremos el diamond$price las columnas numéricas diamond$carat y diamond$price , y el diamond$color columna factorial / categórica diamond$color . Puede cargar el conjunto de datos con el siguiente código si tiene ggplot2 instalado:

library(ggplot2) data(diamonds)

Usando ggplot2 y qplot

Es un trazador de líneas. El elemento clave aquí es dar a qplot el factor por el que desea colorear como argumento de color . qplot te hará una leyenda por defecto.

qplot( x = carat, y = price, data = diamonds, color = diamonds$color # color by factor color (I know, confusing) )

Tu salida debería verse así:

Usando la funcionalidad de parcela incorporada de R

El uso de la funcionalidad de trazado incorporada de R para obtener un trazado coloreado por un factor y una leyenda asociada es un proceso de 4 pasos, y es un poco más técnico que usar ggplot2.

Primero, haremos una función colorRampPallete . colorRampPallete() devuelve una nueva función que generará una lista de colores. En el siguiente fragmento, llamar a color_pallet_function(5) devolvería una lista de 5 colores en una escala de rojo a naranja a azul:

color_pallete_function <- colorRampPalette( colors = c("red", "orange", "blue"), space = "Lab" # Option used when colors do not represent a quantitative scale )

En segundo lugar, debemos hacer una lista de colores, con exactamente un color por diamante. Esta es la asignación que usaremos para asignar colores a puntos de trazado individuales y para crear nuestra leyenda.

num_colors <- nlevels(diamonds$color) diamond_color_colors <- color_pallet_function(num_colors)

En tercer lugar, creamos nuestra trama. Esto se hace como cualquier otra trama que probablemente hayas hecho, excepto que nos referimos a la lista de colores que hicimos como nuestro argumento de col . Siempre que usemos esta misma lista, nuestra asignación entre colores y colores de diamond$colors será consistente en nuestro script R.

plot( x = diamonds$carat, y = diamonds$price, xlab = "Carat", ylab = "Price", pch = 20, # solid dots increase the readability of this data plot col = diamond_color_colors[diamonds$color] )

Cuarto y finalmente, agregamos nuestra leyenda para que alguien que lea nuestro gráfico pueda ver claramente la asignación entre los colores del punto de trazado y los colores de diamante reales.

legend( x ="topleft", legend = paste("Color", levels(diamonds$color)), # for readability of legend col = diamond_color_colors, pch = 19, # same as pch=20, just smaller cex = .7 # scale the legend to look attractively sized )

Tu salida debería verse así:

Nifty, ¿verdad?


El argumento col en la función de plot asigna colores automáticamente a un vector de enteros. Si convierte las iris$Species a numéricas, observe que tiene un vector de 1,2 y 3, por lo que puede aplicar esto como:

plot(iris$Sepal.Length, iris$Sepal.Width, col=as.numeric(iris$Species))

Supongamos que desea rojo, azul y verde en lugar de los colores predeterminados, entonces simplemente puede ajustarlo:

plot(iris$Sepal.Length, iris$Sepal.Width, col=c(''red'', ''blue'', ''green'')[as.numeric(iris$Species)])

Probablemente pueda ver cómo modificar aún más el código anterior para obtener una combinación única de colores.


La palette comandos le indica los colores y su orden cuando col = somefactor . También se puede utilizar para establecer los colores también.

palette() [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray"

Para ver que en tu gráfica puedes usar una leyenda.

legend(''topright'', legend = levels(iris$Species), col = 1:3, cex = 0.8, pch = 1)

Notarás que solo especifiqué los nuevos colores con 3 números. Esto funcionará como usar un factor. Podría haber usado el factor originalmente utilizado para colorear los puntos también. Esto haría que todo fluyera lógicamente, pero solo quería mostrar que puedes usar una variedad de cosas.

También podrías ser específico sobre los colores. Prueba ?rainbow para empezar y vete de allí. Puedes especificar el tuyo o hacer que R lo haga por ti. Siempre y cuando uses el mismo método para cada uno, estás bien.


La biblioteca de lattice es otra buena opción. Aquí agregué una leyenda en el lado derecho y alteré los puntos porque algunos de ellos se superponían.

xyplot(Sepal.Width ~ Sepal.Length, group=Species, data=iris, auto.key=list(space="right"), jitter.x=TRUE, jitter.y=TRUE)


data<-iris plot(data$Sepal.Length, data$Sepal.Width, col=data$Species) legend(7,4.3,unique(data$Species),col=1:length(data$Species),pch=1)

deberías hacerlo por ti. Pero prefiero ggplot2 y sugeriría que para mejores gráficos en R.