Saltar al contenido principal
LibreTexts Español

2.8: Gráficos R

  • Page ID
    149983
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Sistemas gráficos

    Una de las partes más valiosas de cada software estadístico es la capacidad de hacer diversas parcelas. R establece aquí casi un récord. En la base, instalación por defecto, ya están presentes varias decenas de tipos de parcelas, más son del paquete de celosía recomendado, y mucho más están en los paquetes externos de CRAN donde más de la mitad de ellos (¡varios miles!) es capaz de producir al menos un tipo único de parcela. Por lo tanto, hay varios miles de tipos de parcelas en R. Pero esto no es todo. ¡Todas estas parcelas podrían ser mejoradas por el usuario! Aquí trataremos de describir los principios fundamentales de los gráficos R.

    Veamos este ejemplo (Figura\(\PageIndex{1}\)):

    Código\(\PageIndex{1}\) (R)

    plot(1:20, main="Title")
    legend("topleft", pch=1, legend="My wonderful points")

    (Lector curioso encontrará aquí muchas cosas con las que experimentar. ¿Qué es, por ejemplo, pch? Cambia su número en la segunda fila y descúbrelo. ¿Y si suministra 20:1 en lugar de 1:20? Por favor, descubra y explique.)

    Command plot () dibuja la gráfica básica mientras que la leyenda () agrega algunos detalles a la salida ya dibujada. Estos comandos representan dos tipos básicos de comandos de trazado R:

    Screen Shot 2019-01-06 en 2.33.41 PM.png
    Figura\(\PageIndex{1}\) Ejemplo de la trama con título y leyenda.
    1. comandos de alto nivel que crean una nueva trama, y
    2. comandos de bajo nivel que agregan entidades al trazado existente.

    Considera el siguiente ejemplo:

    Código\(\PageIndex{2}\) (R)

    plot(1:20, type="n")
    mtext("Title", line=1.5, font=2)
    points(1:20)
    legend("topleft", pch=1, legend="My wonderful points")

    (¡Estos comandos hacen casi la misma trama que la anterior! ¿Por qué? Por favor averígualo. ¿Y qué es diferente?)

    Tenga en cuenta también que el argumento type del comando plot () tiene muchos valores, y algunos producen resultados interesantes y potencialmente útiles. Para saber más, prueba los tipos p, l, c, s, h y b; comprueba también qué ejemplo (trama) muestra.

    Naturalmente, el comando de trazado más importante es el plot (). Este es un comando “inteligente”\(^{[1]}\). Significa que plot () “entiende” el tipo de objeto suministrado, y dibuja en consecuencia. Por ejemplo, 1:20 es una secuencia de números (vector numérico, ver más abajo para mayor explicación), y plot () “sabe” que requiere puntos con coordenadas correspondientes a sus índices (eje x) y valores reales (eje y). Si le das algo más a la parcela (), lo más probable es que el resultado sea diferente. Aquí hay un ejemplo (Figura\(\PageIndex{2}\)):

    Código\(\PageIndex{3}\) (R)

    plot(cars)
    title(main="Cars from 1920s")

    Aquí los comandos de ambos tipos están aquí de nuevo, pero se emitieron de una manera ligeramente diferente. cars es un conjunto de datos incrustado (es posible que desee llamar? autos que te dan más información). Estos datos no son un vector sino un marco de datos (especie de tabla) con dos columnas, velocidad y distancia (en realidad, distancia de detención). La función plot () elige la gráfica de dispersión como la mejor manera de representar este tipo de datos. En esa gráfica de dispersión, el eje x corresponde con la primera columna, y el eje y, con el segundo.

    Recomendamos verificar qué sucederá si suministra el marco de datos con tres columnas (por ejemplo, datos de árboles incrustados) o tabla de contingencia (como datos incrustados de Titanic o HaireyeColor) a la gráfica ().

    Hay innumerables formas de alterar la trama. Por ejemplo, esto es un poco más elegante “veinte puntos”:

    Código\(\PageIndex{4}\) (R)

    plot(1:20, pch=3, col=6, main="Title")

    (Por favor, ejecute este ejemplo usted mismo. ¿Qué son col y pch? ¿Qué pasará si configuras pch=0? Si estableces col=0? ¿Por qué?)

    En ocasiones, las parcelas R predeterminadas se consideran “demasiado lacónicas”. Esto simplemente está mal. El sistema de trazado en R se hereda de S donde se desarrolló a fondo sobre la base de investigaciones sistemáticas realizadas por W.S. Cleveland y otros en Bell Labs. Hubo muchos experimentos\(^{[2]}\). Por ejemplo, para entender qué tipos de parcelas son más fáciles de capturar, presentaron diferentes parcelas y luego pidieron reproducir los datos numéricamente. La investigación resultó en recomendaciones de cómo hacer gráficas

    Screen Shot 2019-01-06 at 2.47.31 PM.png
    Figura\(\PageIndex{2}\) Ejemplo de parcela que muestra datos de autos.

    salida más comprensible y fácil de leer (tenga en cuenta que no siempre es “más atractivo”!)

    En particular, terminaron con la conclusión de que las tareas elementales de percepción gráfica deben organizarse de la más fácil a la más dura como: posición a lo largo de un\(\rightarrow\) ángulo de\(\rightarrow\) longitud de escala y\(\rightarrow\) área de pendiente\(\rightarrow\) volumen\(\rightarrow\) tono de color, saturación de color y densidad. Por lo que es fácil mentir con las estadísticas, si su trama emplea tareas de percepción principalmente desde el sitio correcto de esta secuencia. (¿Ves ahora por qué los gráficos circulares son particularmente malos?)

    Aplicaron este paradigma a S y consecuentemente, en R casi todo (formas de puntos, colores, etiquetas de ejes, tamaño de trazado) en las gráficas por defecto se basa en la idea de gráficos inteligibles. Además, incluso el orden de los tipos de punto y color representa la secuencia desde las características más fácilmente percibidas hasta las menos percibidas.

    Mira en la trama de la Figura\(\PageIndex{3}\). Guess how was it done, which commands were used?

    Screen Shot 2019-01-06 en 2.52.10 PM.png
    Figura\(\PageIndex{3}\) Ejercicio: ¿qué comandos se utilizaron para hacer esta trama?

    Muchos paquetes amplían las capacidades gráficas de R. El segundo subsistema gráfico R bien conocido proviene del paquete de celosía (Figura\(\PageIndex{4}\)):

    Código\(\PageIndex{5}\) (R)

    library(lattice)
    xyplot(1:20 ~ 1:20, main="title")
    Screen Shot 2019-01-06 at 2.57.55 PM.png
    Figura\(\PageIndex{4}\) Ejemplo de plot con un título hecho con comando xyplot () del paquete de celosía.

    (Repetimos 1:20 dos veces y agregamos tilde porque xyplot () funciona de manera ligeramente diferente a la parcela (). Por defecto, la celosía ya debería estar instalada en su sistema. \(^{[3]}\))

    El enrejado de paquetes ya está instalado por defecto en su sistema. Para saber qué paquetes ya están instalados, escriba library ().

    A continuación, a continuación se muestra lo que sucederá con los mismos datos 1:20 si aplicamos la función qplot () del tercer subsistema gráfico R popular,\(^{[4]}\) paquete ggplot2 (Figura\(\PageIndex{5}\)):

    Código\(\PageIndex{6}\) (R)

    library(ggplot2)
    qplot(1:20, 1:20, main="title")
    Screen Shot 2019-01-06 al 3.05.37 PM.png
    Figura\(\PageIndex{5}\) Ejemplo de plot con un título hecho con el comando qplot () del paquete ggplot2.

    Ya mencionamos anteriormente que el comando library () carga el paquete. Pero, ¿y si este paquete está ausente en su instalación? ggplot2 no está instalado por defecto.

    En ese caso, deberá descargarlo del archivo Internet R (CRAN) e instalarlo. Esto podría hacerse con el comando install.packages (“ggplot2") (nota plural en el nombre del comando y comillas en el argumento). Durante la instalación, primero se le preguntará sobre el espejo de Internet preferible (generalmente es buena idea elegir el primero).

    Luego, es posible que se le pregunte sobre la instalación local o en todo el sistema (la local funciona en la mayoría de los casos).

    Por último, R para Windows o macOS simplemente desempaquetará el archivo descargado mientras que R en Linux compilará el paquete desde la fuente. Esto lleva un poco más de tiempo y también podría requerir algún software adicional para ser instalado. En realidad, algunos paquetes quieren software adicional independientemente del sistema.

    Es probable que la longitud máxima y la anchura máxima de los huevos de las aves estén relacionadas. Por favor, haga una gráfica a partir de los datos eggs.txt y confirme (o deniegue) esta hipótesis. Las explicaciones de los caracteres están en el archivo complementario eggs_c.txt.

    Dispositivos gráficos

    Este es el segundo concepto importante de gráficos R. Cuando ingresa plot (), R abre el dispositivo gráfico de pantalla y comienza a dibujar allí. Si el siguiente comando es del mismo tipo, R borrará el contenido del dispositivo e iniciará la nueva trama. Si el siguiente comando es el de “agregar”, como text (), R agregará algo a la trama existente. Finalmente, si el siguiente comando es dev.off (), R cerrará el dispositivo.

    La mayoría de las veces, no es necesario llamar explícitamente a los dispositivos de pantalla. Se abrirán automáticamente cuando escriba cualquiera de los comandos de trazado principales (como plot ()). Sin embargo, a veces necesitas más de una ventana gráfica. En ese caso, abra el dispositivo adicional con el comando dev.new ().

    Aparte del dispositivo de pantalla, hay muchos otros dispositivos gráficos en R, y necesitarás recordar los más útiles. Funcionan de la siguiente manera:

    Código\(\PageIndex{7}\) (R)

    png(file="01_20.png", bg="transparent")
    plot(1:20)
    text(10, 20, "a")
    dev.off()

    png () abre el dispositivo gráfico con el mismo nombre, y puede aplicar algunas opciones específicas de PNG, por ejemplo, transparencia (útil cuando se quiere poner la imagen en la página Web con algún fondo). Después escribes todos tus comandos de trazado sin ver el resultado porque ahora está redirigido a la conexión de archivo PNG. Cuando finalmente ingrese dev.off (), la conexión y el dispositivo se cerrarán, y el archivo con un nombre 01_20.png aparecerá en el directorio de trabajo en el disco. Tenga en cuenta que R lo hace silenciosamente así que si había el archivo con el mismo nombre, ¡se sobrescribirá!

    Así que guardar parcelas en R es tan sencillo como poner elefante en la nevera en tres pasos (¿Recuerdas? Abrir la nevera — poner elefante — cerrar la nevera.) Este “triple enfoque” (dispositivo abierto — trazado — dispositivo cerrado) es la forma más universal de guardar gráficos de R. Funciona en todos los sistemas y (lo que es realmente importante), desde los scripts R.

    Para el principiante, sin embargo, difícil es que R esté aquí tácita y no emita nada hasta el final. Por lo tanto, se recomienda primero ingresar comandos de plotting de manera común, y verificar qué está pasando en el dispositivo gráfico de pantalla. Luego ingrese el nombre del dispositivo gráfico de archivo (como png ()), y usando la flecha hacia arriba, repita los comandos en la secuencia adecuada. Por último, ingrese dev.off ().

    png () es bueno para, diciendo, páginas web pero solo genera imágenes ráster que no escalan bien. Con frecuencia se recomienda utilizar imágenes vectoriales como PDF:

    Código\(\PageIndex{8}\) (R)

    pdf(file="01_20.pdf", width=8)
    plot(1:20)
    text(10, 20, "a")
    dev.off()

    (Tradicionalmente, el ancho del PDF se mide en pulgadas. Dado que el valor predeterminado es de 7 pulgadas, el comando anterior hace un PDF un poco más ancho.)

    (Arriba, usamos “enfoque cuaternario” porque después del comando de alto nivel, agregamos algunos de bajo nivel. Esto tampoco es difícil de recordar, y tan simple como poner hipopótamo en la nevera en cuatro pasos: abrir nevera — llevar elefante — poner hipopótamo — cerrar nevera.)

    R también puede producir archivos de formato SVG (gráficos vectoriales escalables)\(^{[5]}\).

    Importante es cerrar siempre el dispositivo! Si no lo hiciste, podría haber consecuencias extrañas: por ejemplo, no aparecen nuevas parcelas o algunos archivos en disco se vuelven inaccesibles. Si sospechas que es así, repite dev.off () varias veces hasta que recibas un error como:

    Código\(\PageIndex{9}\) (R)

    dev.off()

    (Esto no es un error peligroso.)

    Por lo general ayuda.

    Por favor, cree el script R que hará la trama PDF por sí mismo.

    Opciones gráficas

    Ya dijimos que los gráficos R podrían afinarse en el número casi infinito de formas. Una forma de personalización es la modificación de las opciones gráficas que están preestablecidas en R. Así es como puedes, por ejemplo, dibujar dos parcelas, una debajo de otra, en una ventana. Para hacerlo, cambie primero las opciones gráficas (Figura\(\PageIndex{6}\)):

    Código\(\PageIndex{10}\) (R)

    old.par <- par(mfrow=c(2, 1))
    hist(cars$speed, main="")
    hist(cars$dist, main="")
    par(old.par)
    Screen Shot 2019-01-06 a las 3.13.58 PM.png
    Figura\(\PageIndex{6}\) Dos histogramas en una gráfica.

    (hist () comando crea gráficos de histograma, que rompen los datos en bins y luego cuentan el número de puntos de datos en cada bin. Ver explicaciones más detalladas al final del capítulo de datos “unidimensionales”.)

    El comando de tecla aquí es par (). Primero, cambiamos uno de sus parámetros, a saber, mfrow, que regula el número y la posición de las parcelas dentro de la región de trazado. Por defecto mfrow es c (1, 1) que significa “una parcela vertical y otra horizontalmente”. Para proteger el valor más antiguo de par (), los guardamos en el objeto old.par. Al final, cambiamos de nuevo par () a valores iniciales.

    La tarea separada es superponer parcelas. Eso se puede hacer de varias maneras, y una de ellas es cambiar el par por defecto (nuevo=...) valor de FALSO a VERDADERO. Entonces el siguiente comando de trazado de alto nivel no borrará el contenido de la ventana sino que dibujará sobre el contenido existente. Aquí debes tener cuidado y evitar intersectar ejes:

    Código\(\PageIndex{11}\) (R)

    hist(cars$speed, main="", xaxt="n", xlab="")
    old.par <- par(new=TRUE)
    hist(cars$dist, main="", axes=FALSE, xlab="", lty=2)
    par(old.par)

    (Prueba esta trama tú mismo.)

    Gráficos interactivos

    Los gráficos interactivos mejoran el análisis de datos. Las herramientas interactivas trazan puntos particulares de la trama hasta sus orígenes en un dato, agregan objetos a los puntos arbitrarios, siguen un punto de datos en particular a través de diferentes parcelas (“cepillado”), mejoran la visualización de datos multidimensionales y mucho más.

    El núcleo del sistema gráfico R no es muy interactivo. Solo dos comandos interactivos, identify () y locator () vienen con la instalación predeterminada.

    Con identify (), R muestra información sobre el punto de datos en la gráfica. En este modo, el clic en el botón del mouse predeterminado (izquierdo en Windows y Linux) cerca del punto revela su número de fila en el conjunto de datos. Esto continúa hasta que haga clic con el botón derecho del mouse (o Comando+clic en macOS).

    Código\(\PageIndex{12}\) (R)

    plot(1:20)
    identify(1:20)

    Identificar puntos en 1:20 es prácticamente inútil. Considera lo siguiente:

    Código\(\PageIndex{13}\) (R)

    plot(USArrests[, c(1, 3)])
    identify(USArrests[, c(1, 3)], labels=row.names(USArrests))

    Por defecto, plot () no nombra estados, solo imprime puntos. Sí, esto es posible imprimir todos los nombres de estado pero esto inundará la ventana de la trama con nombres. Command identify () te ayudará si quieres ver solo valores atípicos.

    Localizador de comandos () devuelve las coordenadas de los puntos clicados. Con locator () puedes agregar texto, puntos o líneas al trazado con el ratón\(^{[6]}\). Por defecto, la salida va a la consola, pero con el pequeño truco puedes dirigirla a la trama:

    Código\(\PageIndex{14}\) (R)

    plot(1:20)
    text(locator(), "My beloved point", pos=4)

    (Nuevamente, el clic izquierdo (Linux y Windows) o el clic (macOS) marcará lugares; cuando detenga esto con el clic derecho (Linux y Windows) o Comando+Clic (macOS), el texto aparecerá en los lugares previamente marcados.)

    ¿Cómo guardar la parcela que se modificó interactivamente? El “triple enfoque” explicado anteriormente no funcionará porque no permite la interacción. Cuando tu parcela esté lista en la pantalla, usa lo siguiente:

    Código\(\PageIndex{15}\) (R)

    dev.copy("pdf", "01_20.pdf"); dev.off()

    Este par de comandos (concatenados con delimitador de comandos, punto y coma, para la compacidad) copian la gráfica existente en el archivo especificado.

    Muchos gráficos interactivos ahora están disponibles en R a través de los paquetes externos como iplot, loon, manipulan, playwith, rggobi, rpanel, teachingDemos y muchos otros.

    Referencias

    1. El mejor término es comando genérico.

    2. Cleveland W. S., McGill R. 1985. Percepción gráfica y métodos gráficos para el análisis de datos científicos. Ciencia. 229 (4716): 828—833.

    3. celosía salió de ideas posteriores de W.S. Cleveland, parcelas enrejadas (condicionales) (ver más abajo para más ejemplos).

    4. ggplot2 es ahora el sistema gráfico R más de moda. Tenga en cuenta, sin embargo, que se basa en la diferente “ideología” que se relacionó más con el software de estadística visual SYSTAT y por lo tanto es ajena a R.

    5. Por cierto, tanto PDF como SVG podrían abrirse y editarse con el editor vectorial disponible gratuitamente.

    6. Colección gmoon.r tiene el comando similar a un juego Miney (), basado en locator (); en parte imita al famoso juego “buscaminas”.


    2.8: Gráficos R is shared under a Public Domain license and was authored, remixed, and/or curated by LibreTexts.