Gráfico de dispersión en R usando ggplot2 (con ejemplo)
Los gráficos son la tercera parte del proceso de análisis de datos. La primera parte trata sobre la extracción de datos, la segunda parte trata limpieza y manipulación de datos. Por fin, es posible que el científico de datos necesite comunicar sus resultados gráficamente.
El trabajo del científico de datos se puede repasar en la siguiente imagen
- La primera tarea de un científico de datos es definir una pregunta de investigación. Esta pregunta de investigación depende de los objetivos y metas del proyecto.
- Después de eso, una de las tareas más destacadas es la ingeniería de funciones. El científico de datos necesita recopilar, manipular y limpiar los datos.
- Cuando se completa este paso, puede comenzar a explorar el conjunto de datos. En ocasiones, es necesario refinar y cambiar la hipótesis original debido a un nuevo descubrimiento.
- Cuando el explicativo Se logra el análisis, el científico de datos debe considerar la capacidad del lector para Comprender los conceptos y modelos subyacentes.
- Sus resultados deben presentarse en un formato que todas las partes interesadas puedan entender. Uno de los mejores métodos para Comunicarse los resultados es a través de un gráfica.
- Los gráficos son una herramienta increíble para simplificar análisis complejos.
paquete ggplot2
Esta parte del tutorial se centra en cómo hacer gráficos/tablas con R.
En este tutorial, utilizará el paquete ggplot2. Este paquete se basa en la base consistente del libro Gramática de gráficos escrito por Wilkinson, 2005. ggplot2 es muy flexible, incorpora muchos temas y especificaciones de trama con un alto nivel de abstracción. Con ggplot2, no puedes trazar gráficos tridimensionales ni crear gráficos interactivos.
En ggplot2, un gráfico se compone de los siguientes argumentos:
- datos
- mapeo estético
- objeto geométrico
- transformaciones estadísticas
- escamas
- sistema coordinado
- ajustes de posición
- facetado
Aprenderá cómo controlar esos argumentos en el tutorial.
La sintaxis básica de ggplot2 es:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Gráfico de dispersión
Veamos cómo funciona ggplot con el conjunto de datos mtcars. Empiece por trazar un diagrama de dispersión de la variable mpg y la variable drat.
Diagrama de dispersión básico
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Explicación del código
- Primero pasa el conjunto de datos mtcars a ggplot.
- Dentro del argumento aes(), agrega el eje x y el eje y.
- El signo + significa que quieres que R siga leyendo el código. Hace que el código sea más legible al dividirlo.
- Utilice geom_point() para el objeto geométrico.
Salida:
Diagrama de dispersión con grupos
A veces, puede resultar interesante distinguir los valores según un grupo de datos (es decir, datos a nivel de factor).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Explicación del código
- El aes() dentro de geom_point() controla el color del grupo. El grupo debe ser una variable factorial. Por lo tanto, conviertes la marcha variable en un factor.
- En total, tienes el código aes(color = factor(gear)) que cambia el color de los puntos.
Salida:
Cambiar eje
Reescalar los datos es una gran parte del trabajo del científico de datos. En raras ocasiones, los datos vienen en una bonita forma de campana. Una solución para hacer que sus datos sean menos sensibles a los valores atípicos es reescalarlos.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Explicación del código
- Transformas las variables xey en log() directamente dentro del mapeo aes().
Tenga en cuenta que se puede aplicar cualquier otra transformación, como estandarización o normalización.
Salida:
Diagrama de dispersión con valores ajustados
Puedes agregar otro nivel de información al gráfico. Puede trazar el valor ajustado de una regresión lineal.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Explicación del código
- gráfico: almacena el gráfico en la variable gráfico. Resulta útil para su posterior uso o para evitar líneas de código demasiado complejas
- El argumento stat_smooth() controla el método de suavizado.
- método = “lm”: Regresión lineal
- col = “#C42126”: Código para el color rojo de la línea
- se = FALSE: No muestra el error estándar
- tamaño = 1: el tamaño de la línea es 1
Salida:
Tenga en cuenta que hay otros métodos de suavizado disponibles.
- glm
- gam
- loess: valor predeterminado
- freno de llanta
Agregar información al gráfico
Hasta ahora, no hemos agregado información a los gráficos. Los gráficos deben ser informativos. El lector debe ver la historia detrás del análisis de datos simplemente mirando el gráfico sin consultar documentación adicional. Por lo tanto, los gráficos necesitan buenas etiquetas. Puede agregar etiquetas con la función labs().
La sintaxis básica para lab() es:
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
Añade un titulo
Una información obligatoria a agregar es obviamente un título.
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
Explicación del código
- my_graph: Utiliza el gráfico que almacenó. Evita reescribir todos los códigos cada vez que agregas nueva información al gráfico.
- Envuelves el título dentro del laboratorio().
- Código para el color rojo de la línea.
- se = FALSE: No muestra el error estándar
- tamaño = 1: el tamaño de la línea es 1
Salida:
Agregar un título con un nombre dinámico
Un título dinámico es útil para agregar información más precisa en el título.
Puede utilizar la función pegar() para imprimir texto estático y texto dinámico. La sintaxis básica de pegar() es:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Ejemplo:
A <-2010 paste("The first year is", A)
Salida:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
Salida:
## [1] "The first year is 2010 and the last year is 2018"
Puede agregar un nombre dinámico a nuestro gráfico, es decir, el promedio de mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Explicación del código
- Creas el promedio de mpg con mean(mtcars$mpg) almacenado en la variable mean_mpg
- Usas el método Paste() con mean_mpg para crear un título dinámico que devuelva el valor medio de mpg.
Salida:
Agregar un subtítulo
Dos detalles adicionales pueden hacer que su gráfico sea más explícito. Estás hablando del subtítulo y del título. El subtítulo va justo debajo del título. El título puede informar sobre quién hizo el cálculo y la fuente de los datos.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicación del código
- Dentro del laboratorio(), agregaste:
- título = “Relación entre millas por hora y drat”: Agregar título
- subtítulo = “Relación desglosada por clase de equipo”: Agregar subtítulo
- caption = “Cálculo propio de los autores: agregar título
- Separas cada nueva información con una coma, ,
- Tenga en cuenta que rompe las líneas de código. No es obligatorio y sólo ayuda a leer el código más fácilmente.
Salida:
Cambiar el nombre del eje x y del eje y
Es posible que las variables en el conjunto de datos no siempre sean explícitas o que, por convención, utilicen el signo _ cuando hay varias palabras (por ejemplo, GDP_CAP). No conviene que ese nombre aparezca en el gráfico. Es importante cambiar el nombre o agregar más detalles, como las unidades.
my_graph + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicación del código
- Dentro del laboratorio(), agregaste:
- x = “Definición de Drat”: cambia el nombre del eje x
- y = “Millas por hora”: cambia el nombre del eje y
Salida:
Controla las escalas
Puede controlar la escala del eje.
La función seq() es útil cuando necesitas crear una secuencia de números. La sintaxis básica es:
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Por ejemplo, si desea crear un rango de 0 a 12 con un paso de 3, tendrá cuatro números, 0 4 8 12
seq(0, 12,4)
Salida:
## [1] 0 4 8 12
Puede controlar la escala del eje x y del eje y como se muestra a continuación
my_graph + scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) + scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Explicación del código
- La función scale_y_continuous() controla la eje
- La función scale_x_continuous() controla la eje x.
- El parámetro breaks controla la división del eje. Puede agregar manualmente la secuencia de números o usar la función seq():
- seq(1, 3.6, by = 0.2): Crea seis números del 2.4 al 3.4 con un paso de 3
- seq(1, 1.6, by = 0.1): Crea siete números del 1 al 1.6 con un paso de 1
Salida:
Tema
Finalmente, R nos permite personalizar nuestra trama con diferentes temáticas. La biblioteca ggplot2 incluye ocho temas:
- tema_bw()
- tema_luz()
- tema_clasis()
- tema_linedraw()
- tema_oscuro()
- tema_minimal()
- tema_gris()
- tema_void()
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Salida:
Guardar parcelas
Después de todos estos pasos, es hora de guardar y compartir su gráfico. Agrega ggsave('NOMBRE DEL ARCHIVO) justo después de trazar el gráfico y se almacenará en el disco duro.
El gráfico se guarda en el directorio de trabajo. Para verificar el directorio de trabajo, puede ejecutar este código:
directory <-getwd() directory
Tracemos su fantástico gráfico, guárdelo y verifiquemos la ubicación.
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Salida:
ggsave("my_fantastic_plot.png")
Salida:
## Saving 5 x 4 in image
Nota: Solo con fines pedagógicos, creamos una función llamada open_folder() para abrir la carpeta del directorio por usted. Sólo necesita ejecutar el código siguiente y ver dónde está almacenada la imagen. Deberías ver un archivo llamado my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Resum
Puede resumir los argumentos para crear un diagrama de dispersión en la siguiente tabla:
Objetivo | Código |
---|---|
Diagrama de dispersión básico |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Diagrama de dispersión con grupo de colores |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Agregar valores ajustados |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
Añadir título |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
Añadir subtitulo |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
Cambiar nombre x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
cambiar el nombre y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
Controlar la escala |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
Crear registros |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
Tema |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Guardar |
ggsave("my_fantastic_plot.png") |