• ĀæPor quĆ© hacer graficos?
  • Paquetes disponibles en R
  • Paquete Graphics
    • Scatter plot / GrĆ”ficos de dispersiĆ³n
    • Pairs plot / matriz de grĆ”ficos de dispersiĆ³n
    • Bar chars / grĆ”fico de baras
    • Pie plot / grĆ”fico de pastel
    • Histogram / Histograma
    • Box plot / grĆ”fico de caja
    • Cor plot / grĆ”ficos de correlaciĆ³n
    • Multiples grĆ”ficos
    • Paquete Ggplot2
    • GrĆ”fico de dispersiĆ³n
    • ĀæDĆ³nde puedo encontrar mĆ”s geoms?
    • Matriz de ā€œdispersiĆ³nā€
    • GrĆ”fico de barras
    • GrĆ”fico de pastel
    • Histograma y grĆ”fico de dispersiĆ³n
    • qplot


En este documento se presenta una introducciĆ³n a la construcciĆ³n de grĆ”ficos en R, usando los grĆ”ficos graphics propios de R y el paquete ggplot2.


ĀæPor quĆ© hacer graficos?

En el proceso de minerĆ­a de datos la visualizaciĆ³n de datos esta presente en varias de sus etapas entre las principales estĆ”n la exploraciĆ³n de los datos y la presentaciĆ³n de los resultados, los grĆ”ficos permiten, de forma intuitiva, encontrar y entender patrones, grupos o valores atipicos que puedan existir en los datos, una vez terminado el proceso de exploraciĆ³n o predicciĆ³n los grĆ”ficos nos permiten comunicar los resultados a nuestra audiencia sin importar si esta tiene o no conocimientos en MinerĆ­a de Datos.


Ejemplo de como comunicar los resultados de un anƔlisis

Puedes descargar los datos utilizados para realizar estas grĆ”ficas en la siguiente direcciĆ³n : http://rnotr.com/assets/files/ab3.csv


Como podemos ver en el ejemplo anterior, el resultado de un anĆ”lisis exploratorio o predictivo puede ser presentado en un par de grĆ”ficas si estas se realizan de forma correcta, aunque este tema se tocarĆ” a profundidad en el curso de visualizaciĆ³n de datos en esta semana se verĆ”n las pautas bĆ”sicas para la creaciĆ³n de grĆ”ficos en R.

Paquetes disponibles en R

En R existen un gran cantidad de paquetes que nos permiten graficar datos entre los mĆ”s utilizados estĆ”n graphics el paquete nativo de R para la visualizaciĆ³n de datos y ggplot2 un paquete desarrollado por Hadley Wickham basado en la teorĆ­a de la gramĆ”tica de los grĆ”ficos o grammar of graphics y un gran favorito de muchos a la hora de realizar grĆ”ficos en R.

Paquete Graphics

Existe una gran cantidad de maneras de representar datos, cada una de ellas pensada para abordar un problema y tipo de dato en especĆ­fico, en este curso veremos como crear algunos de estos grĆ”ficos asĆ­ como su interpretaciĆ³n.

Scatter plot / GrĆ”ficos de dispersiĆ³n

Este es uno de los mĆ©todos mĆ”s clĆ”sicos para representar la relaciĆ³n entre dos variables numĆ©ricas, este funciona utilizando el sistema de coordenadas cartesiano, para ejemplificar este tipo de grĆ”fico utilizaremos dos fuentes de datos ambas disponibles en R, la tabla de datos cars y la tabla de datos iris.

Primer plot.

Inicialmente para crear un grĆ”fico de dispersiĆ³n sĆ³lo es necesario indicarle a la funciĆ³n plot los valores para la coordenada de X y los valores para la coordenada Y.

plot(x = cars$dist, y = cars$speed) # tamaƱo de las etiquetas de los ejes.

Como podemos ver tenemos como resultado un grĆ”fico que aunque Ćŗtil es poco informativo, por suerte el paquete graphics nos permite dar modificar muchas de las propiedades de nuestro grĆ”fico para facilitar su lectura e interpretaciĆ³n.

plot(x = cars$dist, 
     y = cars$speed,
     # Titulo principal
     main = "RelaciĆ³n entre la velocidad de un vehiculo y distancia requerida para el frenado", 
     xlab = "Velocidad (mph)", # etiqueta del eje x
     ylab = "Distancia de frenado (millas)", # etiqueta del eje y 
     xlim = c(0,120), # rango del eje x
     ylim = c(4,25),# rango del eje y
     col = "red",# color del los formas del grƔfico
     pch = 19, # tipo de forma dle grƔfico
     cex.main = .95, # tamaƱo del titulo
     cex.axis = .80, # tamaƱo de la escala
     cex.lab = .80) # tamaƱo de las etiquetas de los ejes.



Existen una gran variedad de funciones que nos permiten agregar formas extra a nuestros grƔficos, ya sean lƭneas, puntos, texto o polƭgonos.

plot(1:10,1:10,axes=FALSE,xlab="",ylab="")
polygon(runif(4,1,10),runif(4,1,10),col="lightblue")
points(runif(5,1,10),runif(5,1,10),cex=1.5,col="red")
points(runif(5,1,10),runif(5,1,10),pch="+",cex=1.7,col="green")
lines(1:10,runif(10,1,10),lty=2,lwd=2)
text(runif(5,1,10),runif(5,1,10),labels=c("uno","dos","tres","cuatro","cinco"),cex=1.7,col=rainbow(5))
abline(h=5,lty=4)
title("GrƔfico Variado")
axis(1,labels=c("uno","tres","cinco","siete","nueve"),at=seq(1,10,by=2))
axis(2,labels=1:10,at=1:10)
legend(8,3,lty=c(1:3),col=rainbow(3),legend=c("uno","dos","tres"))

Se utiliza este primer tipo de grƔfico para ejemplificar el como personalizar un grƔfico ya que todos estos atributos funcionan de forma muy similar para los demƔs grƔficos del paquete graphics.

Regresando a nuestro grĆ”fico en este caso podemos observar como existe una relaciĆ³n entre la velocidad del vehĆ­culo y la distancia que es este requiere para frenar.

Pairs plot / matriz de grĆ”ficos de dispersiĆ³n

Como se comentĆ³ anteriormente los grĆ”ficos de dispersiĆ³n nos permiten encontrar relaciones entre las variables numĆ©ricas, no en todos los casos el problema tiene sĆ³lo dos variables, para crear un pairs plot la funciĆ³n a utilizar es la funciĆ³n pairs indicĆ”ndole el nombre del la hoja de datos sobre la que va a trabajar.

pairs(iris)

Como podemos ver tenemos como resultado una matriz en donde podemos ver las relaciones entre todas la variables de nuestra tabla, en este caso al ser la variable Specie una variable cualitativa es recomendable eliminarla del grƔfico.

pairs(iris[,1:4])

Aunque ya tenemos nuestro grĆ”fico sĆ³lo hace falta verlo para notar que su lectura e interpretaciĆ³n no son nada sencillas de realizar, una mejora que podemos realizar es la utilizaciĆ³n de colores para representar las distintas especies de flores dentro de los datos, para esto utilizaremos el paquete RColorBrewer, en la siguiente imagen podemos ver las diferente paletas de colore que nos ofrece el paquete.



Para obtener una paleta de colores utilizando el paquete RColorBrewer debemos indicarle la cantidad de colores que necesitamos y cual es la paleta que colores que deseamos utilizar, estos colores se representan utilizando cĆ³digo hexadecimal.

paleta <-  brewer.pal(3, "Set1")
paleta
[1] "#E41A1C" "#377EB8" "#4DAF4A"

Al tener 150 observaciones en la tabla de datos debemos indicar el color con al que se va a presentar a cada una, una forma de hacerlo es utilizando la variable Specie.

iris$Species
 [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
 [ reached getOption("max.print") -- omitted 100 entries ]
Levels: setosa versicolor virginica
tipo  <- as.numeric(iris$Species)
tipo
 [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[36] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [ reached getOption("max.print") -- omitted 100 entries ]
colores <- paleta[tipo]
colores
 [1] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
 [8] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
[15] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
[22] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
[29] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
[36] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
[43] "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C" "#E41A1C"
[50] "#E41A1C"
 [ reached getOption("max.print") -- omitted 100 entries ]
pairs(iris[,1:4],
     # TĆ­tulo principal
     main = "RelaciĆ³n entre las variables largo y ancho del sĆ©palo y pĆ©talo 
     para las variedades de flor setosa, versicolor y virginica.", 
     pch = 21, # Tipo de la forma   
     cex.main = .95, # TamaƱo del tƭtulo
     bg = colores) # Colores por especio.

Como podemos ver la lectura del grĆ”fico mejora considerablemente ya que hora sabemos cuantos grupos existen en los datos, por Ćŗltimo agregaremos una leyenda que nos permite indicar que color representa a que especie.

pairs(iris[,1:4],
     # titulo principal
     main = "RelaciĆ³n entre las variables largo y ancho del sĆ©palo y pĆ©talo \n para las variedades de flor setosa, versicolor y virginica.", 
     pch = 21, # tipo de la forma   
     cex.main = .95, # tamaƱo del titulo
     bg = alpha(colores,.7), # colores para las especies de flores
     oma = c(7, 3, 7, 3),
     cex = 1.5) # hacemos espacio extra (abajo,izquierda,arriba,derecha) para agregar la leyenda


legend("bottom", # leyenda en la perte inferior
       title = "Especies :", # titulo de la leyenda
       legend = as.character(unique(iris$Species)), # nombres de los grupos
       fill = paleta, # colores de la leyenda
       horiz = TRUE, # leyenda de forma horizontal
       cex = .7, # tamaƱo del tƭtulo
       xpd = T,
       inset = -0.1) # ubicaciĆ³n de la leyenda

Existen tambiĆ©n la posibilidad de realizar grĆ”ficos de dispersiĆ³n en 3 dimensiones esto nos permite identificar con mayor facilidad los grupos que existan en nuestros datos si se seleccionan correctamente la variables a utilizar y el angulo desde el que se observaran los datos.

library(scatterplot3d) # paquete para realizar los grƔficos en 3D
par(oma = c(3,2,1,2)) # se hace espacio extra para agregar la leyenda
scatterplot3d(x = iris$Petal.Width, # eje x
              y = iris$Sepal.Length, # eje y
              z = iris$Sepal.Width,  # eje z
              xlab = "Ancho Del PĆ©talo",
              ylab = "Largo Del SĆ©palo",
              zlab = "Ancho Del SĆ©palo",
              bg = colores,
              pch = 21,
              angle = 190, # Ɣngulo desde el que se obervan los datos.
              main = "DispersiĆ³n de los individuos por largo del sĆ©palo,
              ancho del pƩtalo y ancho del sƩpalo.",
              cex.main = 1) # tamaƱo del tƭtulo

legend("bottom", # ubicaciĆ³n de la leyenda
      legend = levels(iris$Species), # nombres de los grupos
      col =  paleta, # colores
      pch = 19, # tipo de forma
      inset = -0.4, 
      xpd = T, 
      horiz = TRUE)

Como podemos ver en el grĆ”fico la dispersiĆ³n de los datos es algo confusa, podemos intentar encontrar un mejor Ć”ngulo.

par(oma = c(3,2,1,2))
scatterplot3d(x = iris$Petal.Width, 
              y = iris$Sepal.Length, 
              z = iris$Sepal.Width, 
              xlab = "Ancho Del PĆ©talo",
              ylab = "Largo Del SĆ©palo",
              zlab = "Ancho Del SĆ©palo",
              bg = alpha(colores,.7),
              pch = 21,
              angle = 50, # cambia el Ɣngulo del grƔfico
              main = "DispersiĆ³n de los individuos por largo del sĆ©palo,
              ancho del pƩtalo y ancho del sƩpalo.",
              cex.main = 1,
              cex.symbols = 2)

legend("bottom", legend = levels(iris$Species),
      col =  paleta, 
      pch = 19, 
      inset = -0.4, 
      xpd = T, 
      horiz = TRUE)

Como vemos desde el Ć”ngulo correcto se pueden identificar tres grupos y aunque existe algo de confusiĆ³n entre los grupos versicolor y virginica estos pueden separarse con un error de clasificaciĆ³n bastante pequeƱo.


Bar chars / grƔfico de baras

En los dos grĆ”ficos anteriores estĆ”n pensados para representar datos numĆ©ricos, los grĆ”ficos de barras nos permiten representar tanto variables cualitativas como cuantitativas, para esto caso utilizaremos un dataset que califica la obra de diversos pintores clĆ”sicos en base a su composiciĆ³n, dibujo, color, expresiĆ³n ademas de indicar a que escuela pertenecieron.

library(MASS)
data("painters")
head(painters)
              Composition Drawing Colour Expression School
Da Udine               10       8     16          3      A
Da Vinci               15      16      4         14      A
Del Piombo              8      13     16          7      A
Del Sarto              12      16      9          8      A
Fr. Penni               0      15      8          0      A
Guilio Romano          15      16      4         14      A

Lo primero a tomar en cuenta al utilizar la funciĆ³n barplot es que esta a diferencia de las que vimos anteriormente espera recibir una matriz y no una hoja de datos, para convertir nuestra hoja de datos en una matriz podemos utilizar el comando as.matrix, para poder ver los resultados con mayor claridad no graficaremos todos los datos.

Calificaciones del primer artista de la lista.
datos <- as.matrix(painters[1,1:4]) # calificaciones del primer artista.
datos
         Composition Drawing Colour Expression
Da Udine          10       8     16          3
barplot(datos,
        main = "Calificaciones para el artista : Da Udine",
        cex.main = 1, # tamaƱo del tƭtulo
        ylab = "CalificaciĆ³n")


En la siguiente grƔfica nuestro objetivo serƔ graficar las 4 calificaciones de 5 artistas, por lo que seleccionamos los datos y los convertimos en una matriz.

datos <- as.matrix(painters[1:5, 1:4]) # se seleccionan los primeros 5 pintores de la tabla 
datos
           Composition Drawing Colour Expression
Da Udine            10       8     16          3
Da Vinci            15      16      4         14
Del Piombo           8      13     16          7
Del Sarto           12      16      9          8
Fr. Penni            0      15      8          0

En el grƔfico las barras representan a las variables, como podemos ver los datos a representar que son observaciones de nuestra tabla (filas) y no columnas (variables), una forma sencilla de solucionar esto es transponiendo la matriz de datos.

datos <- t(datos) # se transpone la matriz 
datos
            Da Udine Da Vinci Del Piombo Del Sarto Fr. Penni
Composition       10       15          8        12         0
Drawing            8       16         13        16        15
Colour            16        4         16         9         8
Expression         3       14          7         8         0
colores <- brewer.pal(4, "Set2")

par(mar = c(4,6,4,6))
barplot(datos,
        main = "Calificaciones de artistas clƔsicos hechas por el crƭtico Roger de Piles",
        cex.main = 1,
        cex.names = .7,
        ylab = "CalificaciĆ³n",
        col = colores,
        beside = TRUE,
        legend.text = T,
        args.legend = list(x = "right", 
                           bty = "n", 
                           inset = c(-0.25, 0), 
                           xpd = TRUE, 
                           title = "CategorĆ­as : "),
        border = "white")

Como podemos ver en la grƔfica al tener varios individuos estos son agrupados en pequeƱos grƔficos independientes donde se pueden observar las diferentes variables, existen tambiƩn una forma de representar los datos en forma de pila donde todas las variables se representan en una sola barra.

colores <- brewer.pal(4, "Set2")

par(mar = c(4,6,4,6))
barplot(datos,
        main = "Calificaciones de artistas clƔsicos hechas por el crƭtico Roger de Piles",
        cex.main = 1,
        cex.names = .7,
        ylab = "CalificaciĆ³n",
        col = colores,
        legend.text = T,
        args.legend = list(x = "right",
                           bty = "n", 
                           inset = c(-0.30,0), 
                           xpd = TRUE, title = "CategorĆ­as : "),
        
        border = "white")

datos <- painters$School
datos
 [1] A A A A A A A A A A B B B B B B C C C C C C D D D D D D D D D D E E E
[36] E E E E F F F F G G G G G G G
 [ reached getOption("max.print") -- omitted 4 entries ]
Levels: A B C D E F G H

Al no ser nuestra variable numĆ©rica tenemos que realizar un conteo de nuestra variable para esto podemos utilizar la funciĆ³n table.

datos <- table(datos)
datos
datos
 A  B  C  D  E  F  G  H 
10  6  6 10  7  4  7  4 
datos <- t(datos)
datos
      datos
        A  B  C  D  E  F  G  H
  [1,] 10  6  6 10  7  4  7  4
# datos <- t(table(painters$School))
barplot(datos)


Aunque ya tenemos la grĆ”fica es recomendable hacer algunos cambios que faciliten la lectura e interpretaciĆ³n.

escuelas <-c("Renaissance","Mannerist","Seicento","Venetian","Lombard","Sixteenth Century","Seventeenth Century","French")
par(mar = c(4,6,4,6))
barplot(datos,
        main = "DistribuciĆ³n de los pintores calificados segun la escuela a la que pertenecen",
        cex.main = 1,
        names = escuelas,
        horiz = T,
        cex.names = .6,
        las = 1,
        border = "white")


Pie plot / grƔfico de pastel

Este es junto con el grĆ”fico de barras uno de los tipos de grĆ”ficos mĆ”s iconicos de la estadĆ­stica, formado con un circulo que se divide en mĆŗltiples porciones (como un pastel) utilizado normalmente para representar porcentajes o proporciones.

La funciĆ³n para crear grĆ”ficos de pastel en el paquete grĆ”ficos se llama pie, entre sus principales parĆ”metros estĆ”n :

  • x = valores
  • labels = etiquetas de las variables
grupos <- c(18, 30, 32, 10, 10)
etiquetas <- c("A", "B", "C", "D", "F")
colores <- brewer.pal(5, "Blues")
pie(x = grupos, labels = etiquetas, col = colores)

Para este ejemplo se tomaran al azar 75 observaciones de la tabla de datos iris.

muestra <- sample(iris$Species,75)
distribucion <- table(muestra)
distribucion
muestra
    setosa versicolor  virginica 
        30         22         23 
distribucion <- sort(distribucion,decreasing = T)
distribucion
muestra
    setosa  virginica versicolor 
        30         23         22 

Como vemos ademas de los parĆ”metros entes indicados podemos enviarle el resultado del comando table, mejorar la interpretaciĆ³n del grĆ”fico es recomendable ordenar las variables antes de realizar el grĆ”fico, a continuaciĆ³n se ordenan las variables las etiquetas y se les agrega el sĆ­mbolo de porcentaje ā€œ%ā€.

distribucion.prop <- round(prop.table(distribucion),2) * 100
distribucion.prop 
muestra
    setosa  virginica versicolor 
        40         31         29 
distribucion.prop <- paste0(distribucion.prop,"%")
distribucion.prop
[1] "40%" "31%" "29%"
colores <- brewer.pal(3, "Greens")
pie(x = distribucion, 
    labels = distribucion.prop,
    col = colores,
    main = "DistribuciĆ³n de las especies en la tabla de datos iris")

legend("topleft",
       legend = names(distribucion), 
       cex = 1, 
       fill = colores, 
       title = "Especie :")


Histogram / Histograma

Este tipo de grĆ”fica es utilizada para visualizar la frecuencia con la que se distribuyen los datos, normalmente se presenta como un grĆ”fico de barras donde el Ć”rea de la grĆ”fica representa la frecuencia de los valores representados, la funciĆ³n utilizada para crear un historial en R es llama hist

hist(mtcars$mpg)

color <- brewer.pal(3,"Dark2")
hist(mtcars$mpg,
     main = "DistribuciĆ³n de 32 vehiculos segun su consumo de combustible
     segĆŗn Motor Trend US magazine para modelos 1973 - 1974",
     xlab = "Rendimiento de combustible Millas/Galon",
     ylab = "Frecuencia",
     col = color[1])


En el siguiente grƔfico se muestra el como puede leerse un este tipo de grƔfico

Otro uso frecuente de los histogramas es ver la distribuciĆ³n de probabilidad de los datos y compararlo contra una distribuciĆ³n normal.

color <- brewer.pal(3,"Dark2")
hist(mtcars$mpg,
     prob = TRUE, # se grafica la distribuciĆ³n de probabilidad.
     main = "DistribuciĆ³n de 32 vehiculos segun su consumo de combustible
     segĆŗn Motor Trend US magazine para modelos 1973 - 1974",
     xlab = "Rendimiento de combustible (Millas/Galon)",
     ylab = "Frecuencia",
     col = color[1])

lines(density(mtcars$mpg), col = color[2], lwd = 2) # densidad de los datos
lines(density(mtcars$mpg, adjust = 2), lty = "dotted", col = color[3], lwd = 2) # distribuciĆ³n normal


Box plot / grƔfico de caja

Este tipo de grĆ”fico representa en base a cuartile las distribuciĆ³n de frecuencias e indica los datos atĆ­picos o extremos.

boxplot(iris[,1:4],
        col = color[1],
        outcol = "black",
        outpch = 19,
        main = "Valores atĆ­picos para la tabla de datos iris")

par(mar = c(3,8,3,2))
boxplot(iris[,1:4],
        col = color[1],
        outcol = "black",
        outpch = 19,
        main = "Valores atĆ­picos para la tabla de datos iris",
        names = c("Largo de sƩpalo","Ancho del sƩpalo","Largo del pƩtalo","Ancho del pƩtalo"),
        horizontal = T,
        las = 1,
        cex.names = 1)



Cor plot / grĆ”ficos de correlaciĆ³n

Este tipo de grĆ”fico nos permite determinar de forma visual si existe correlaciĆ³n entre nuestras variables, para esto utilizaremos la funciĆ³n cor para calcular la matriz de correlaciones y la funciĆ³n corrplot del paquete corrplot para graficarlo.

library(corrplot)

correlaciones <- cor(iris[,-5])
correlaciones 
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
corrplot(correlaciones)

corrplot(correlaciones, 
         method = "color",
         title = "CorrelaciĆ³n entre las variables de la tabla iris",
         tl.cex = .6,
         tl.srt = 0,
         mar = c(1,1,2,1))


Multiples grƔficos

muestra <- iris[sample(1:150,60),]
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
barplot(table(muestra$Species))
title("Combinacion de varios graficos")
pie(table(muestra$Species))
plot(muestra$Sepal.Length,muestra$Sepal.Width)

Paquete Ggplot2

Ggplot2 nos plantea un paradigma diferente en el desarrollo de visualizaciones basadose en la teorĆ­a de la ā€œgramĆ”tica de los grĆ”ficosā€, donde en lugar de construir el grĆ”fico lo que se hacer es describir cuales son los componentes que no forman.

library(ggplot2)
ggplot()

GrĆ”fico de dispersiĆ³n

ggplot(data = iris) +
  geom_point(mapping = aes(x = Sepal.Length , y = Sepal.Width))

ggplot(data = iris) +
  geom_point(mapping = aes(x = Sepal.Length , y = Sepal.Width, color = Species))

ggplot(data = iris) +
  geom_point(mapping = aes(x = iris$Sepal.Length , y = iris$Sepal.Width, color = Species)) +
  labs(title = "DispersiĆ³n de las especies de la flores setosa, virginica \n y versicolor segun el largo y ancho de su sĆ©palo",
       x = "Largo del sƩpalo",
       y = "Ancho del sƩpalo",
       color = "Especies :") +
  theme(plot.title = element_text(hjust = 0.5)) + 
  theme_bw()

Separar el grƔfica en base a una variable

ggplot(data = iris) +
  geom_point(mapping = aes(x = iris$Sepal.Length , y = iris$Sepal.Width, color = Species)) +
  labs(title = "DispersiĆ³n de las especies de la flores setosa virginica \n y versicolor segun el largo y ancho de su sĆ©palo",
       x = "Largo del sƩpalo",
       y = "Ancho del sƩpalo",
       color = "Especies :") +
  facet_wrap(~Species) + # se indica la variable por la que se separaran los grƔficos
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))

ĀæDĆ³nde puedo encontrar mĆ”s geoms?

Para mĆ”s informaciĆ³n al respecto pueden consultar la documentaciĆ³n online en el siguiente enlace: http://ggplot2.tidyverse.org/reference/#section-layer-geoms

Matriz de ā€œdispersiĆ³nā€

library(GGally)
ggpairs(data = iris, columns = 1:4, 
        title = "RelaciĆ³n entre las variables largo y ancho del sĆ©palo y pĆ©talo \n para las variedades de flor setosa, versicolor y virginica", 
        mapping = aes(color = Species, alpha = .7)) + 
        theme_bw()

GrƔfico de barras

library(reshape2)
iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
5            5.0         3.6          1.4         0.2     setosa
6            5.4         3.9          1.7         0.4     setosa
7            4.6         3.4          1.4         0.3     setosa
8            5.0         3.4          1.5         0.2     setosa
9            4.4         2.9          1.4         0.2     setosa
10           4.9         3.1          1.5         0.1     setosa
 [ reached getOption("max.print") -- omitted 140 rows ]
iris2 <- melt(iris, id.vars="Species")
iris2
       Species     variable value
1       setosa Sepal.Length   5.1
2       setosa Sepal.Length   4.9
3       setosa Sepal.Length   4.7
4       setosa Sepal.Length   4.6
5       setosa Sepal.Length   5.0
6       setosa Sepal.Length   5.4
7       setosa Sepal.Length   4.6
8       setosa Sepal.Length   5.0
9       setosa Sepal.Length   4.4
10      setosa Sepal.Length   4.9
11      setosa Sepal.Length   5.4
12      setosa Sepal.Length   4.8
13      setosa Sepal.Length   4.8
14      setosa Sepal.Length   4.3
15      setosa Sepal.Length   5.8
16      setosa Sepal.Length   5.7
 [ reached getOption("max.print") -- omitted 584 rows ]
ggplot(data=iris2) +
 geom_bar(aes(x = Species, y = value, fill = variable), stat="identity", position="dodge") +
 labs(title = "Ancho y largo del sƩpalo y pƩtalo", 
      subtitle = "para las variedades de flores sƩtona, versicolor y virginica",
      x = "Especies", 
      y = "Valores", 
      fill = "Tipo de flor:",
      caption = "Fuente: tabla de datos iris") + 
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5)) 

GrƔfico de pastel

library(reshape2)
iris2 <- melt(iris, id.vars = "Species")
iris2
       Species     variable value
1       setosa Sepal.Length   5.1
2       setosa Sepal.Length   4.9
3       setosa Sepal.Length   4.7
4       setosa Sepal.Length   4.6
5       setosa Sepal.Length   5.0
6       setosa Sepal.Length   5.4
7       setosa Sepal.Length   4.6
8       setosa Sepal.Length   5.0
9       setosa Sepal.Length   4.4
10      setosa Sepal.Length   4.9
11      setosa Sepal.Length   5.4
12      setosa Sepal.Length   4.8
13      setosa Sepal.Length   4.8
14      setosa Sepal.Length   4.3
15      setosa Sepal.Length   5.8
16      setosa Sepal.Length   5.7
 [ reached getOption("max.print") -- omitted 584 rows ]
iris3 <- iris[sample(1:nrow(iris), 110), ]
quan <- as.vector(table(iris3$Species))
pos <- cumsum(quan) - quan/2
quantity <- data.frame(Species = c("sƩtosa", "versicolor", "virginica"), 
                       quantity = quan, 
                       position = pos) 
quantity
     Species quantity position
1     sƩtosa       33     16.5
2 versicolor       42     54.0
3  virginica       35     92.5
ggplot(iris3, aes(x=factor(1), fill=Species)) + 
  geom_bar(width=1) + 
  geom_text(data=quantity, 
            aes(x=factor(1), 
                y=position, 
                label=quantity) , 
            size=5) + 
  labs(x="", y="") + 
  coord_polar(theta="y")

Histograma y grĆ”fico de dispersiĆ³n

ggplot(data=iris, aes(x = Sepal.Width)) +
geom_histogram(binwidth = 0.2, color = "black", fill = "steelblue", aes(y = ..density..)) +
  geom_density(stat = "density", alpha = I(0.2), fill = "blue") +
  xlab("Ancho del sƩpalo") +  
  ylab("Densidad") + 
  ggtitle("Histograma y curva de densidad")

qplot

qplot(iris$Sepal.Length, iris$Sepal.Width)

qplot(iris$Species)

qplot(iris$Sepal.Width)
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Temas

Existen una serie de temas que podemos aplicar a nuestros grƔficos para mejorar su aspecto.

ggplot(mpg, aes(x = class , y= hwy)) + 
scale_x_discrete() +
geom_jitter(aes(color = class, x = class), 
            position = position_jitter(width = .05), alpha = 0.5) +
geom_boxplot(aes(color = class), outlier.colour = NA, position = "dodge") +
xlab("Clase") + ylab("Millas por galon")

library(ggthemes)

ggplot(mpg, aes(x = class , y= hwy)) + 
scale_x_discrete() +
geom_jitter(aes(color = class, x = class), 
            position = position_jitter(width = .05), alpha = 0.5) +
geom_boxplot(aes(color = class), outlier.colour = NA, position = "dodge") +
labs(x ="Clase", y = "Millas por galon", color = "Clase") +
theme_fivethirtyeight()+
scale_colour_few()

library(ggthemes)

ggplot(mpg, aes(x = class , y= hwy)) + 
scale_x_discrete() +
geom_jitter(aes(color = class, x = class), 
            position = position_jitter(width = .05), alpha = 0.5) +
geom_boxplot(aes(color = class), outlier.colour = NA, position = "dodge") +
labs(x ="Clase", y = "Millas por galon", color = "Clase") +
theme_wsj() +
  scale_colour_pander()


FIN DEL DOCUMENTO