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 revisar a continuación.wing 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.

Diagrama de dispersión en R

  • 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 simplificarplex análisis.

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 lo siguientewing 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 desea que R siga leyendo el código. Hace que el código sea más legible al romperlo.
  • Utilice geom_point() para el objeto geométrico.

Salida:

Gráfico de dispersión básico

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:

Diagrama de dispersión con grupos

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:

Cambiar eje

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 su gráfico en el gráfico variable. Es útil para un uso posterior o evitar demasiado com.plex línea de códigos
  • 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:

Gráfico de dispersión con valores ajustados

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, nosotros havenNo agregó información en los gráficos. Los gráficos deben ser informativos. El lector debería ver la historia detrás del análisis de datos con solo mirar el gráfico sin consultar documentación adicional. Por 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:

Añade un titulo

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 título con un nombre dinámico

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:
    • title = “Relación entre Milla por horas 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:

Agregar un subtítulo

Cambiar el nombre del eje x y del eje y

Es posible que las variables en sí en el conjunto de datos no siempre sean explícitas o, por convención, utilicen _ cuando hay varias palabras (es decir, GDP_CAP). No desea que ese nombre aparezca en su gráfico. Es importante cambiar el nombre o agregar más details, al igual que 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 = “Milla por horas”: cambia el nombre del eje y

Salida:

Cambiar el nombre del eje x y del eje y

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:

Controla las escalas

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:

Tema

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:

Guardar parcelas

ggsave("my_fantastic_plot.png")

Salida:

## Saving 5 x 4 in image

Note: 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)

Resumen

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")