Está en la página 1de 127

Procesamiento de datos y visualización con R

I. Introducción y objetivos

II. Grá cos básicos en R

III. Grá cos en capas Ggplot2

IV. Grá cos dinámicos Plotly

V. Resumen

VI. Caso práctico con solución

VII. Enlaces de interés

VIII. Glosario

IX. Bibliografía
Lección 1 de 9

I. Introducción y objetivos

1.1. Introducción de la unidad

Evidentemente, el resultado de un algoritmo o de un estudio es determinante en el éxito de un proyecto. Sin


embargo, una de las tareas más importantes es saber comunicar las transformaciones realizadas sobre los
datos o los resultados obtenidos, es decir: saber realizar visualización de datos. 

En esta unidad, además de seguir realizando transformación y limpieza de datos, se introducirá al alumno a
las librerías más populares para visualización de datos en R:
Realización de gráficos básicos en R.

Realización de gráficos por capas en GGPLOT2.

Realización de gráficos dinámicos en Plotly.

Para todas las secciones se mostrarán elementos similares, desde la creación de gráficas simples,
agregación de texto y de color, hasta la realización de diferentes tipos de visualización como diagramas de
dispersión, histogramas, gráficos de barras, etc.

C O NT I NU A R

1.2. Objetivos de la unidad


Al término de la presente unidad, el alumno habrá adquirido las siguientes competencias:

1 Conocer qué tipo de gráficas utilizar en función del dato que se quiera representar.

2 Saber agregar elementos textuales en los diferentes ejes de una gráfica, además del título.

3 Agregar color a los diferentes componentes de una gráfica.

4 Implementar gráficas simples a través de la librería por defecto de R.

5 Implementar gráficas de varias capas con Ggplot2.

6 Introducirse en los elementos básicos de Plotly para la realización de gráficas dinámicas.


Lección 2 de 9

II. Gráficos básicos en R

Con total seguridad, en casi cualquier proyecto de ciencia de datos será necesario mostrar resultados o,
simplemente, dar voz a los datos a través de la visualización de datos. En R, existen por defecto funciones
preparadas para realizar gráficas sin necesidad (por el momento) de instalar librerías de visualización de
datos.

Dentro de las diferentes funciones de R dedicadas a obtener gráficos, existen tres grupos principales:

F UN C I O N E S DE A LT O N I V E L F UN C I O N E S DE BA JO N I V E L F UN C I O N E S I N T E R A C T I VA S

Funciones básicas que crean un gráfico, añaden color y añaden elementos textuales en los ejes “x” e “y”.

F UN C I O N E S DE A LT O N I V E L F UN C I O N E S DE BA JO N I V E L F UN C I O N E S I N T E R A C T I VA S

Aquellas que necesitan de un gráfico creado previamente. Son las que nos permiten añadir líneas, puntos,
etc.
F UN C I O N E S DE A LT O N I V E L F UN C I O N E S DE BA JO N I V E L F UN C I O N E S I N T E R A C T I VA S

Aquellas que nos permiten interactuar con el gráfico y muestran información de forma emergente sobre las
diferentes observaciones de este, realizando zoom, etc.

C O NT I NU A R

Se recomienda seguir esta sección con el notebook:

R_Graficos_Basicos_HTML.zip
733.5 KB

R_Graficos_Basicos_RMD.zip
3.7 KB

La función más básica para realizar gráficas en R es plot, que produce un gráfico diferente en función del
tipo de dato. Existen los siguientes gráficos en función del tipo de variable:

C O NT I NU A R
1

Vector
Grafico de los elementos sobre su índice (por lo general, de puntos).

c <- c(1, 5, 8, 9, 10, 3, 5)

plot(c)

Figura 1. Gráfica simple de un vector.


Fuente: elaboración propia.
C O NT I NU A R

Factor
Se representarán los valores de la variable numérica en función de cada factor de la variable categórica en
forma de barra vertical.

fact <- factor(c("BUENO", "MALO", "MALO", "BUENO", "BUENO", "BUENO", "BUENO

plot(fact)
Figura 2. Gráfica simple de un vector categórico.
Fuente: elaboración propia.

C O NT I NU A R

Matriz
Diagrama de dispersión de la segunda columna sobre la primera (a no ser que se especifique otro orden).
my.mat <- matrix(1:30, nrow = 10, ncol = 3)

plot(my.mat)

Figura 3. Gráfica simple de una matriz.


Fuente: elaboración propia.

C O NT I NU A R

 Para especificar un nuevo orden, utilizaremos dos parámetros en la función plot.


plot(my.mat[, 2], my.mat[, 3])

Figura 4. Gráfica simple de una matriz, diferentes dimensiones.


Fuente: elaboración propia.

C O NT I NU A R
4

Dataframe
Matriz gráfica de visualización entre pares (diagrama pairs). Se muestra una gráfica para todas las variables
entre sí, es decir, la primera con la segunda, la primera con la tercera, etc.

Como ejemplo, utilizaremos el dataframe por defecto en R: iris. Este dataset contiene información sobre el
lirio repartida en las siguientes variables:

Longitud del sépalo en centímetros (sepal_length).

Anchura del sépalo en centímetros (sepal_width).

Longitud del pétalo en centímetros (petal_length).

Anchura del pétalo en centímetros (sepal_length).

Clase de flor: Iris setosa, Iris versicolour e Iris virginica.

C O NT I NU A R

El dataset puede ser encontrado en el siguiente enlace:


http://archive.ics.uci.edu/ml/datasets/iris
 Se trata de un dataset con información de diferentes clases (variables numéricas y
categóricas), por lo que puede ser utilizado para casi cualquier tipo de visualización,
como se verá a lo largo de esta sección.

C O NT I NU A R

plot(iris)
Figura 5. Gráfica simple de un dataframe.
Fuente: elaboración propia.

En el caso de que la función plot tome más de un elemento, producirá los siguientes tipos de gráficas, en
función del tipo de dato.

C O NT I NU A R

Vectores numéricos
Nube de puntos de “y” sobre “x”.

v.1 <- 1:100


v.2 <- v.1^2

plot(v.1, v.2)
Figura 6. Gráfica de dispersión entre dos vectores.
Fuente: elaboración propia.

C O NT I NU A R

Si “x” es factor e “y” es un vector numérico


Diagrama de caja y bigotes para cada nivel de la variable factor. En un diagrama de caja y bigotes o boxplot
se representan el elemento máximo y mínimo (líneas de los extremos) desde el primer cuartil (25 % de los
datos) hasta el tercer cuartil (75 % de los datos) formando un cuadro, donde se añade una línea horizontal
que corresponde con la mediana o segundo cuartil (50 % de los datos). Cuando existen observaciones que
tengan un valor 1,5 veces mayor que el rango intercuartílico (por encima y debajo de la mediana) se
considerarán outliers.
x <- fact
y <- c(50, 21, 35, 48, 6, 75, 63)

plot(x, y)

Figura 7. Gráfica entre vector y variable categórica.


Fuente: elaboración propia.

C O NT I NU A R

Si ambas variables son factor


Diagrama de barras de “x” con distribución acumulada para cada nivel de “y”. En este tipo de gráfica puede
verse que en el eje “x” se sitúan todos los factores de la primera variable categórica, mientras que en el eje
“y” se sitúan todos los factores de la segunda variable categórica. Su representación se realizará en modo
de barra dividiendo cada barra vertical del eje “x” en función del número de factores de la variable del eje “y”.
En otras palabras, el primer vector contiene los factores “uno” y “dos” y el segundo vector los factores
“bueno” y “malo”, por lo tanto para el factor “uno” se representarán los valores que contengan el factor
“bueno” y “malo”, de modo que la barra vertical se dividirá en dos.

new.fact <- factor(c("UNO", "DOS", "UNO", "DOS", "DOS", "DOS", "UNO"))

plot(new.fact, fact)

Figura 8. Gráfica entre dos variables categóricas.


Fuente: elaboración propia.
C O NT I NU A R

2.1. Elementos básicos de una visualización en R


A lo largo de esta sección, se irán mostrando los diferentes elementos que se pueden agregar y modificar en
una visualización.

Se trabajará con dos vectores para ir agregando elementos al gráfico.

vec.1 <- sample(1:1000, 100, replace = T)


vec.2 <- sample(1:1000, 100, replace = T)

C O NT I NU A R

Primero, se presenta la gráfica básica entre ambos, su scatter plot o diagrama de dispersión. Aquí se
mostrará un punto para cada valor de “x” y de “y”:

plot(vec.1, vec.2)
Figura 9. Scatter plot.
Fuente: elaboración propia.

Para añadir elementos textuales, se pueden utilizar los siguientes parámetros:

1 "Ylab": texto en eje “y”.

2 "Xlab": texto en eje “x”.

3 "Main": título de la gráfica.

C O NT I NU A R
plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y")

Figura 10. Agregar texto a una gráfica.


Fuente: elaboración propia.

C O NT I NU A R
Si es necesario, puede aumentarse el tamaño de la
fuente de los ejes mediante el parámetro “cex.lab”. Del
mismo modo, podemos cambiar el tamaño de fuente del
título con “cex.main”. Además, puede cambiarse el color
de cualquier elemento de texto con los parámetros
“col.lab” y “col.main”.

C O NT I NU A R

plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
cex.lab = 1.5,
cex.main = 3,
col.lab = "red",
col.main = "blue")
Figura 11. Modificar tamaño y color de texto en los ejes.
Fuente: elaboración propia.

Salvo necesidad específica de aumentar los textos de una gráfica, por ejemplo, para que puedan distinguirse
con facilidad para una presentación, lo habitual es trabajar con estos parámetros por defecto.

C O NT I NU A R

Para mejorar la legibilidad del gráfico, a veces puede resultar interesante modificar la posición del texto de
los valores de los ejes. Esto se consigue modificando el valor del parámetro “las”, que puede tomar valores
de cero a tres:

0

Siempre paralelo al eje (por defecto).

1

Mostrar horizontal.

2

Mostrar perpendicular al eje.

3

Mostrar vertical.

C O NT I NU A R
plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1)

Figura 12. Cambiar la posición de los ejes (I).


Fuente: elaboración propia.

C O NT I NU A R
plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 2)

Figura 13. Cambiar la posición de los ejes (II).


Fuente: elaboración propia.

C O NT I NU A R
plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 3)

Figura 14. Cambiar la posición de los ejes (III).


Fuente: elaboración propia.
Aunque, por defecto, la función plot muestre un diagrama de dispersión, es posible cambiar el tipo de gráfico
con el parámetro type. Los tipos posibles son:

C O NT I NU A R

"p"
Representación con puntos.

plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 'p')
Figura 15. Representación con puntos.
Fuente: elaboración propia.

C O NT I NU A R

"I"
Representación con líneas. En el caso de los vectores 1 y 2, con una longitud de 100 elementos cada uno,
irán uniendo a traves de una línea todos sus elementos de forma continua.

plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 'l')

Figura 16. Representación con líneas.


Fuente: elaboración propia.

C O NT I NU A R

"B"
Puntos y líneas.
plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 'b')

Figura 17. Representación con puntos y líneas.


Fuente: elaboración propia.

C O NT I NU A R
"C"
Solo las líneas sin el punto de unión.

plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 'c')
Figura 18. Representación sin puntos y con líneas.
Fuente: elaboración propia.

C O NT I NU A R

"O"
Se representan las líneas por encima de los puntos.

plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 'o')
Figura 19. Representación: líneas por encima de los puntos.
Fuente: elaboración propia.

C O NT I NU A R

"H"
Representación con histograma. Para cada valor de “x” se representará la línea vertical del valor “y”.
plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 'h')

Figura 20. Representación de histograma.


Fuente: elaboración propia.

C O NT I NU A R
"S"
Mostrar la gráfica de forma escalonada (steps).

plot(vec.1, vec.2,
ylab = "Vector 2",
xlab = "Vector 1",
main = "Scatter plot X ~ Y",
las = 1,
type = 's')
Figura 21. Representación escalonada.
Fuente: elaboración propia.

C O NT I NU A R

 Mediante el parámetro “col” se añade color a la gráfica. Pueden observarse algunos de


los múltiples colores que soporta R en el siguiente enlace:
http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

v.1 <- 1:100


v.2 <- v.1^2

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'blue')
Figura 22. Cambiando el color.
Fuente: elaboración propia.

C O NT I NU A R

Cuando el gráfico es de dispersión, a través del parámetro “cex” se


puede aumentar el tamaño del punto, y con “lwd” se puede
aumentar el tamaño de la línea; además, con “lty” se puede cambiar
el tipo de línea a los siguientes valores: 0=blank, 1=solid (default),
2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash.

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'blue',
cex = 1)

Figura 23. Cambiar el tipo de marcador (I)


Fuente: elaboración propia.
C O NT I NU A R

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'red',
cex = 5)
Figura 24. Cambiar el tipo de marcador (II).
Fuente: elaboración propia.

C O NT I NU A R

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'blue',
type = "l",
lwd = 7)
Figura 25. Cambiar el tipo de marcador (III).
Fuente: elaboración propia.

C O NT I NU A R

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'green',
type = "l",
lwd = 3,
lty = 3)
Figura 26. Cambiar el tipo de marcador (IV).
Fuente: elaboración propia.

C O NT I NU A R

Fuera de la función plot, para añadir una leyenda a la visualización, se utiliza la función legend, en donde
tendremos que añadir los siguientes parámetros importantes:
legend

Valor que tendrá cada valor que se muestre en la leyenda.

title

Título de la leyenda.

Posición

Se pueden distinguir las siguientes posiciones: “bottomright”, “bottom”, “bottomleft”, “left”, “topleft”, “top”,
“topright”, “right” y “center”.

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'darkgreen',
type = "l",
lwd = 3,
lty = 3)

legend("topleft", legend = c("Cuadrática ~ Lineal"),


col = c("darkgreen"),
lty=c(3),
lwd = 3,
title = "Leyenda")
Figura 27. Añadir una leyenda.
Fuente: elaboración propia.

C O NT I NU A R

Antes de comenzar a diseñar diferentes tipos de gráficos, se explicará


la función que nos permite crear varios tipos de visualización,
dentro del mismo espacio gráfico.
Para este propósito, nos encontramos con la función “par”, que recibe uno de los dos siguientes parámetros:

Distribuir los gráficos de filas


“mfrow”
a columnas.

Distribuir los gráficos de


“mfcol”
columnas a filas.

C O NT I NU A R
par(mfrow=c(2,2))

# Fila 1, columna 1
plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'darkgreen',
type = "l",
lwd = 3,
lty = 3)

# Fila 2, columna 1
plot(fact)

# Fila 1, columna 2
plot(x, y)

# Fila 2, columna 2
plot(x, y)
Figura 28. Crear gráficas múltiples.
Fuente: elaboración propia.

R, también dispone de funciones para poder guardar nuestras gráficas: a través de los formatos JPEG, PNG
o PDF. Es muy importante que, una vez generada la gráfica, cerremos el espacio gráfico con la función
“dev.off”.

pdf("Lineal_y_cuadrática.pdf")

plot(v.1, v.2,
xlab = "Lineal",
ylab = "Cuadrática",
main = "Representación cuadrática",
col = 'darkgreen',
type = "l",
lwd = 3,
lty = 3)

legend("topleft", legend = c("Cuadrática ~ Lineal"),


col = c("darkgreen"),
lty=c(3),
lwd = 3,
title = "Leyenda")

dev.off()
## png
## 2

C O NT I NU A R

2.2. Tipos de gráficos en R


En esta sección, se realizarán algunos de los principales tipos de gráficos que podemos llevar a cabo en R.

C O NT I NU A R

1 Histograma: es una visualización de datos en la que una variable se representa a través de


barras, donde la superficie de cada barra es proporcional a la frecuencia de los valores
representados.  
normal.values <-rnorm(1000,0,1) # Ver otras formas de la distribución norma

hist(normal.values,
ylab = "Frecuencia",
xlab = "Valores",
main = "Histograma",
col = "grey",
border = "blue")

Figura 29. Ejemplo de histograma.


Fuente: elaboración propia.
 Se obtiene que los elementos con valor entre -0,5 y +0,5 son los más
predominantes, repitiéndose prácticamente 200 veces cada uno.

C O NT I NU A R

2 Boxplot.

boxplot(normal.values,
border = "darkgreen",
col = "darkseagreen",
main = "Boxplot",
las = 1,
outcol="darkred")
Figura 30. Diagrama de caja y bigotes.
Fuente: elaboración propia.

C O NT I NU A R

Atendiendo al diagrama de caja y bigotes de la figura 30, es posible


concluir con que el segundo cuartil (o mediana) tiene valor 0, el
primer cuartil tiene valor superior a -0,5 y el tercer cuartil tiene valor
superior a +0,5. El rango intercuartílico se sitúa de -2,5 a +2,5, por lo
tanto, todos los elementos que quedan fuera de este rango son
considerados valores atípicos u outliers.
C O NT I NU A R

3 Diagrama de barras.

barplot(normal.values, border = rainbow(length(normal.values)))

Figura 31. Diagrama de barras.


Fuente: elaboración propia.
Cada observación del vector representa una gráfica vertical. Para
los valores positivos irá desde 0 a su valor de forma ascendente y,
para los negativos, desde 0 a su valor de forma descendente. 

C O NT I NU A R

Como se puede observar, en esta visualización, se ha utilizado un gradiente de color. Se pueden encontrar
los siguientes:

“rainbow”

"heat.colors”

"terrain.colors”

"topo.colors”

"cm.colors”

Se muestra a continuación un ejemplo diferente de gráfico de barras.

C O NT I NU A R
v <- c(100, 32, 87, 57, 110)

barplot(v, main = "Diagrama de barras", xlab="Componentes", ylab="Valor", c

Figura 32. Diagrama de barras, diferente forma.


Fuente: elaboración propia.

 En este caso, al ser todos los valores positivos, todas las barras verticales se muestran
de forma ascendente, siendo la que tiene un mayor valor la que está situada en quinta
posición con valor 110.
C O NT I NU A R

2.3. Añadir elementos de bajo nivel


En esta sección, se prestará especial atención a las siguientes funciones que se sobreponen en un gráfico
existente:

A BLI N E PO I N T S LI N E S

Puede ser de dos tipos: “v”, vertical en el punto “x”, u “h”, horizontal en el punto “y”.

A BLI N E PO I N T S LI N E S

Dibuja puntos en las coordenadas “x” e “y”.

A BLI N E PO I N T S LI N E S
Pinta líneas en las coordenadas “x” e “y”.

C O NT I NU A R

hist(normal.values,
ylab = "Frecuencia",
xlab = "Valores",
main = "Histograma",
col = "grey",
border = "blue")

abline(v=mean(normal.values), lty = 2, lwd = 3, col = "darkgreen")


abline(v=median(normal.values), lty = 3, lwd = 3, col = "red")
Figura 33. Componentes de alto nivel (I).
Fuente: elaboración propia.

C O NT I NU A R

set.seed(123)
a <- sample(1:100, 10, replace = F)
b <- sample(1:100, 10, replace = F)

plot(a,b, main = "A ~ B", las = 1)


points(a,b, col = "red")
lines(a,b, col = "darkblue")
abline(h=mean(b), lty = 3, lwd = 3, col = "forestgreen")
abline(v=mean(a), lty = 3, lwd = 3, col = "forestgreen")

Figura 34. Componentes de alto nivel (II).


Fuente: elaboración propia.
Lección 3 de 9

III. Gráficos en capas Ggplot2

Según el libro The grammar of graphics 1, Ggplot22 es una librería de visualización de datos que trabaja a
nivel de capa, es decir: permite ir añadiendo nuevos elementos estéticos a nuestra visualización de datos.

1 Wilkinson, L. The grammar of graphics. Springer; 2005. Puedes adquirir este libro en

este enlace.
2 Web de Ggplot2. [En línea] Disponible en este enlace.

C O NT I NU A R

Este paquete está disponible en dos formatos: desde Tidyverse o, directamente, descargando Ggplot2. Para
explicar las bondades de esta librería, se utilizará la segunda opción.

Se recomienda seguir el seguir el siguiente notebook durante esta sección:

GGPLOT2_HTML.zip
569.2 KB
GGPLOT2_RMD.zip
2.8 KB

# install.packages("ggplot2")

library(ggplot2)

C O NT I NU A R

Por regla general, se comienza pasando el dataset a la función Ggplot


y las variables que intervienen en la gráfica a través del argumento
“aes”. Posteriormente, se irán añadiendo capas.

C O NT I NU A R

Para comenzar el trabajo en Ggplot2, una vez se ha importado la librería, se toma el dataset midwest, que
viene precargado en dicha librería; este dataset contiene información relativa a condados de Estados
Unidos. La información del dataset está disponible en este enlace.
summary(midwest)
## PID county state area
## Min. : 561 Length:437 Length:437 Min. :0.00500
## 1st Qu.: 670 Class :character Class :character 1st Qu.:0.02400
## Median :1221 Mode :character Mode :character Median :0.03000
## Mean :1437 Mean :0.03317
## 3rd Qu.:2059 3rd Qu.:0.03800
## Max. :3052 Max. :0.11000
## poptotal popdensity popwhite popblack
## Min. : 1701 Min. : 85.05 Min. : 416 Min. : 0
## 1st Qu.: 18840 1st Qu.: 622.41 1st Qu.: 18630 1st Qu.: 29
## Median : 35324 Median : 1156.21 Median : 34471 Median : 201
## Mean : 96130 Mean : 3097.74 Mean : 81840 Mean : 11024
## 3rd Qu.: 75651 3rd Qu.: 2330.00 3rd Qu.: 72968 3rd Qu.: 1291
## Max. :5105067 Max. :88018.40 Max. :3204947 Max. :1317147
## popamerindian popasian popother percwhite
## Min. : 4.0 Min. : 0 Min. : 0 Min. :10.69
## 1st Qu.: 44.0 1st Qu.: 35 1st Qu.: 20 1st Qu.:94.89
## Median : 94.0 Median : 102 Median : 66 Median :98.03
## Mean : 343.1 Mean : 1310 Mean : 1613 Mean :95.56
## 3rd Qu.: 288.0 3rd Qu.: 401 3rd Qu.: 345 3rd Qu.:99.07
## Max. :10289.0 Max. :188565 Max. :384119 Max. :99.82
## percblack percamerindan percasian percother
## Min. : 0.0000 Min. : 0.05623 Min. :0.0000 Min. :0.00000
## 1st Qu.: 0.1157 1st Qu.: 0.15793 1st Qu.:0.1737 1st Qu.:0.09102
## Median : 0.5390 Median : 0.21502 Median :0.2972 Median :0.17844
## Mean : 2.6763 Mean : 0.79894 Mean :0.4872 Mean :0.47906
## 3rd Qu.: 2.6014 3rd Qu.: 0.38362 3rd Qu.:0.5212 3rd Qu.:0.48050
## Max. :40.2100 Max. :89.17738 Max. :5.0705 Max. :7.52427
## popadults perchsd percollege percprof
## Min. : 1287 Min. :46.91 Min. : 7.336 Min. : 0.5203
## 1st Qu.: 12271 1st Qu.:71.33 1st Qu.:14.114 1st Qu.: 2.9980
## Median : 22188 Median :74.25 Median :16.798 Median : 3.8142
## Mean : 60973 Mean :73.97 Mean :18.273 Mean : 4.4473
## 3rd Qu.: 47541 3rd Qu.:77.20 3rd Qu.:20.550 3rd Qu.: 4.9493
## Max. :3291995 Max. :88.90 Max. :48.079 Max. :20.7913
## poppovertyknown percpovertyknown percbelowpoverty percchildbelowpover
## Min. : 1696 Min. :80.90 Min. : 2.180 Min. : 1.919
## 1st Qu.: 18364 1st Qu.:96.89 1st Qu.: 9.199 1st Qu.:11.624
## Median : 33788 Median :98.17 Median :11.822 Median :15.270
## Mean : 93642 Mean :97.11 Mean :12.511 Mean :16.447
## 3rd Qu.: 72840 3rd Qu.:98.60 3rd Qu.:15.133 3rd Qu.:20.352
## Max. :5023523 Max. :99.86 Max. :48.691 Max. :64.308
## percadultpoverty percelderlypoverty inmetro category
## Min. : 1.938 Min. : 3.547 Min. :0.0000 Length:437
## 1st Qu.: 7.668 1st Qu.: 8.912 1st Qu.:0.0000 Class :character
## Median :10.008 Median :10.869 Median :0.0000 Mode :character
## Mean :10.919 Mean :11.389 Mean :0.3432
## 3rd Qu.:13.182 3rd Qu.:13.412 3rd Qu.:1.0000
## Max. :43.312 Max. :31.162 Max. :1.0000
str(midwest)
## Classes 'tbl_df', 'tbl' and 'data.frame': 437 obs. of 28 variables:
## $ PID : int 561 562 563 564 565 566 567 568 569 570 .
## $ county : chr "ADAMS" "ALEXANDER" "BOND" "BOONE" ...
## $ state : chr "IL" "IL" "IL" "IL" ...
## $ area : num 0.052 0.014 0.022 0.017 0.018 0.05 0.017 0
## $ poptotal : int 66090 10626 14991 30806 5836 35688 5322 16
## $ popdensity : num 1271 759 681 1812 324 ...
## $ popwhite : int 63917 7054 14477 29344 5264 35157 5298 165
## $ popblack : int 1702 3496 429 127 547 50 1 111 16 16559 .
## $ popamerindian : int 98 19 35 46 14 65 8 30 8 331 ...
## $ popasian : int 249 48 16 150 5 195 15 61 23 8033 ...
## $ popother : int 124 9 34 1139 6 221 0 84 6 1596 ...
## $ percwhite : num 96.7 66.4 96.6 95.3 90.2 ...
## $ percblack : num 2.575 32.9 2.862 0.412 9.373 ...
## $ percamerindan : num 0.148 0.179 0.233 0.149 0.24 ...
## $ percasian : num 0.3768 0.4517 0.1067 0.4869 0.0857 ...
## $ percother : num 0.1876 0.0847 0.2268 3.6973 0.1028 ...
## $ popadults : int 43298 6724 9669 19272 3979 23444 3583 1132
## $ perchsd : num 75.1 59.7 69.3 75.5 68.9 ...
## $ percollege : num 19.6 11.2 17 17.3 14.5 ...
## $ percprof : num 4.36 2.87 4.49 4.2 3.37 ...
## $ poppovertyknown : int 63628 10529 14235 30337 4815 35107 5241 16
## $ percpovertyknown : num 96.3 99.1 95 98.5 82.5 ...
## $ percbelowpoverty : num 13.15 32.24 12.07 7.21 13.52 ...
## $ percchildbelowpovert: num 18 45.8 14 11.2 13 ...
## $ percadultpoverty : num 11.01 27.39 10.85 5.54 11.14 ...
## $ percelderlypoverty : num 12.44 25.23 12.7 6.22 19.2 ...
## $ inmetro : int 0 0 0 1 0 0 0 0 0 1 ...
## $ category : chr "AAR" "LHR" "AAR" "ALU" ...
head(midwest)
## # A tibble: 6 x 28
## PID county state area poptotal popdensity popwhite popblack popamer
## <int> <chr> <chr> <dbl> <int> <dbl> <int> <int>
## 1 561 ADAMS IL 0.052 66090 1271. 63917 1702
## 2 562 ALEXA~ IL 0.014 10626 759 7054 3496
## 3 563 BOND IL 0.022 14991 681. 14477 429
## 4 564 BOONE IL 0.017 30806 1812. 29344 127
## 5 565 BROWN IL 0.018 5836 324. 5264 547
## 6 566 BUREAU IL 0.05 35688 714. 35157 50
## # ... with 19 more variables: popasian <int>, popother <int>, percwhite
## # percblack <dbl>, percamerindan <dbl>, percasian <dbl>, percother <db
## # popadults <int>, perchsd <dbl>, percollege <dbl>, percprof <dbl>,
## # poppovertyknown <int>, percpovertyknown <dbl>, percbelowpoverty <dbl
## # percchildbelowpovert <dbl>, percadultpoverty <dbl>,
## # percelderlypoverty <dbl>, inmetro <int>, category <chr>

C O NT I NU A R

Se ordenan los datos:

library(tidyr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
df <- gather(midwest, "pop_category", "population", c(5:11, 17, 21))
df <- gather(df, "per_category", "pervalue", 5:17)

# La gran mayoría de estas variables podrían dejarse como as.character sin


df <- df %>% transmute(
PID = as.factor(PID),
county = as.factor(county),
state = as.factor(state),
area = area,
inmetro = inmetro,
category = as.factor(category),
pop_category = as.factor(pop_category),
population = population,
per_category = as.factor(per_category),
pervalue = pervalue
)
summary(df)
## PID county state area inmetr
## 561 : 117 CRAWFORD: 585 IL:11934 Min. :0.00500 Min. :0
## 562 : 117 JACKSON : 585 IN:10764 1st Qu.:0.02400 1st Qu.:0
## 563 : 117 MONROE : 585 MI: 9711 Median :0.03000 Median :0
## 564 : 117 ADAMS : 468 OH:10296 Mean :0.03317 Mean :0
## 565 : 117 BROWN : 468 WI: 8424 3rd Qu.:0.03800 3rd Qu.:1
## 566 : 117 CLARK : 468 Max. :0.11000 Max. :1
## (Other):50427 (Other) :47970
## category pop_category population
## AAR :22581 popadults : 5681 Min. : 0
## AAU : 9009 popamerindian: 5681 1st Qu.: 137
## LAR : 3510 popasian : 5681 Median : 2987
## LHR : 3276 popblack : 5681 Mean : 38886
## HLU : 3042 popdensity : 5681 3rd Qu.: 28005
## ALU : 2340 popother : 5681 Max. :5105067
## (Other): 7371 (Other) :17043
## per_category pervalue
## percadultpoverty : 3933 Min. : 0.0000
## percamerindan : 3933 1st Qu.: 0.9214
## percasian : 3933 Median :10.5538
## percbelowpoverty : 3933 Mean :26.5432
## percblack : 3933 3rd Qu.:25.8500
## percchildbelowpovert: 3933 Max. :99.8604
## (Other) :27531
colnames(df)
## [1] "PID" "county" "state" "area" "inmetr
## [6] "category" "pop_category" "population" "per_category" "perval

 Como primera gráfica tomaremos un diagrama de dispersión, la capa encargada de


esta función es geom_point.

C O NT I NU A R
ggplot(data = df) +
geom_point(mapping = aes(x = pervalue, y = population))

Figura 35. Gráfico de dispersión con Ggplot2.


Fuente: elaboración propia.

C O NT I NU A R
La anterior gráfica muestra la representación del número de
población para cada valor porcentual del dataset.

C O NT I NU A R

De la primera gráfica, es importante destacar los componentes más importantes de una capa:

mapping: se definen los componentes estéticos (“aes”: aesthetics).

data: dataframe de origen.

geom_”: capas de interacción gráfica.

C O NT I NU A R

Lo siguiente que puede realizarse sobre la gráfica anterior es agregar color a la nube de puntos; para ello,
utilizamos el parámetro color.

ggplot(data = df) +
geom_point(mapping = aes(x = pervalue, y = population, color = state))
Figura 36. Agregar color a través de una variable categórica.
Fuente: elaboración propia.

C O NT I NU A R

 También podemos utilizar un color cualquiera que no pertenezca a las variables, por
lo tanto, utilizamos el parámetro color fuera de “aes”.
ggplot(data = df) +
geom_point(mapping = aes(x = pervalue, y = population), color = "dodgerbl

Figura 37. Agregar color en Ggplot2.


Fuente: elaboración propia.

C O NT I NU A R
Si en lugar de mostrar el color por país, se quiere mostrar el tamaño de punto en función del país, se utilizará
el parámetro size.

ggplot(data = df) +
geom_point(mapping = aes(x = pervalue, y = population, size = state))
## Warning: Using size for a discrete variable is not advised.

Figura 38. Cambiar el grosor del punto en Ggplot2.


Fuente: elaboración propia.

C O NT I NU A R
Existen otros parámetros que modifican la forma y el color de nuestra gráfica, como “alpha” y “shape”.

ggplot(data = df) +
geom_point(mapping = aes(x = pervalue, y = population, alpha = state))
## Warning: Using alpha for a discrete variable is not advised.

Figura  39. Cambiar la opacidad del punto en función de su valor.


Fuente: elaboración propia.
C O NT I NU A R

ggplot(data = df) +
geom_point(mapping = aes(x = pervalue, y = population, shape = state))

Figura 40. Cambiando el tipo de marcador (I).


Fuente: elaboración propia.
La anterior gráfica, debido a la densidad de los puntos, no es muy reveladora, por lo tanto, podemos hacer
uso las funciones de Dplyr para obtener una muestra más reducida.

C O NT I NU A R

ggplot(data = sample_frac(df, 0.001)) +


geom_point(mapping = aes(x = pervalue, y = population, shape = state))

Figura 41. Cambiar el tipo de marcador (II).


Fuente: elaboración propia.
C O NT I NU A R

3.1. Tipos de gráficas

1 Gráfico de barras: es importante en este ejemplo destacar el uso de fill dentro de “aes” y color
como parámetro mapping.

ggplot(df) +
geom_bar(mapping = aes(state, fill = state), color = "black")
Figura 42. Gráfico de barras en Ggplot2.
Fuente: elaboración propia.

C O NT I NU A R

2 Boxplot: se pueden destacar los outliers con el parámetro “outlier.colour”. Se pueden voltear
los ejes en cualquier gráfico con “coord_flip”.
ggplot(df) +
geom_boxplot(mapping = aes(x = pervalue, fill = state), outlier.colour =

Figura 43. Boxplot en Ggplot2.


Fuente: elaboración propia.

C O NT I NU A R
3 Diagrama de densidad: en algunas gráficas, el parámetro color no estará disponible, pero sí
colour. Se observa también que el uso de alpha aumenta o disminuye la transparencia del
interior de la gráfica. Este diagrama muestra la distribución de una variable continua.

ggplot(df) +
geom_density(mapping = aes(area), colour = "darkblue", fill = "darkblue",

Figura 44. Diagrama de densidad en Ggplot2.


Fuente: elaboración propia.
C O NT I NU A R

ggplot(df) +
geom_density(mapping = aes(area, fill=state), colour = "darkblue", alpha

Figura 45. Diagrama de densidad en Ggplot2, múltiples variables.


Fuente: elaboración propia.
De este modo se ve la distribución que tiene la variable “área” para
cada Estado.

C O NT I NU A R

3 Histograma.

ggplot(df) +
geom_histogram(mapping = aes(area), color = "red", fill = "lightblue", al
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Figura 46. Histograma en Ggplot2.
Fuente: elaboración propia.

Las superficies de los Estados con área cercanas a 0,3 son las más predominantes.

C O NT I NU A R

 Si se pasa una variable categórica como relleno, mostrará la frecuencia acumulada


para cada barra del histograma.
ggplot(df) +
geom_histogram(mapping = aes(area, fill = state), color = "red" )
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Figura 47. Histograma con frecuencia acumulada en Ggplot2.


Fuente: elaboración propia.

C O NT I NU A R
Con el parámetro “binwidth” se puede definir la anchura de cada barra.

ggplot(df) +
geom_histogram(mapping = aes(area), color = "blue", binwidth = 0.02)

Figura 48. Histograma modificado por “bindwidth”.


Fuente: elaboración propia.

C O NT I NU A R
Con el parámetro bins se fuerza a mostrar un número fijo de barras verticales.

ggplot(df) +
geom_histogram(mapping = aes(area), color = "blue", bins=100)

Figura 49. Histograma donde cambia bins.


Fuente: elaboración propia.
A través de la amplitud de cada barra un histograma puede cambiar la forma completamente, pese a
representar los mismos datos.

C O NT I NU A R

 Se puede combinar un histograma con un diagrama de densidad; en estos casos, habrá


una restricción especial, y es que, en el histograma, tendremos que utilizar el tipo
especial y=..density..

ggplot(df, aes(area)) +
geom_histogram(aes(y=..density..), color = "blue", bins=100) +
geom_density(colour = "darkblue", fill = "pink", alpha = 0.4)
Figura 50. Histograma y función de densidad.
Fuente: elaboración propia.

C O NT I NU A R

Si se quiere que los valores de relleno no se agrupen en forma de frecuencia acumulada, se utilizará el
parámetro dodge con el valor identity.

ggplot(df) +
geom_histogram(mapping = aes(area, fill=state), color = "blue", position
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Figura 51. Histograma en el que cambia la disposición de las barras (I).


Fuente: elaboración propia.

C O NT I NU A R

ggplot(df) +
geom_histogram(mapping = aes(inmetro, fill=state), color = "blue", positi
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Figura 52. Histograma en el que cambia la disposición de las barras (II).
Fuente: elaboración propia.

C O NT I NU A R

También se puede superponer la posición de los elementos


con identity.
C O NT I NU A R

ggplot(df) +
geom_histogram(mapping = aes(area, fill=state), color = "blue", position
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Figura 53. Histograma en el que cambia la disposición de las barras (III).


Fuente: elaboración propia.
Al presentar escalas diferentes la variable “área” por cada tipo de Estado, esta visualización no sería la más
correcta, sino que convendría agrupar los valores de área por estado.

C O NT I NU A R

ggplot(df) +
geom_freqpoly(mapping = aes(area, colour=state)) # fill no funciona
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Figura 54. Histograma en el que cambia el modo “freqpoly”.
Fuente: elaboración propia.

C O NT I NU A R

Añadir smooth a una gráfica. El smooth será la zona coloreada de


gris, la cual corresponderá al intervalo de confianza 95 de una
regresión lineal.

ggplot(df) +
geom_point(mapping = aes(population, area)) + geom_smooth(aes(population,
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Figura 55. Gráfica X ~ Y con recta de ajuste.
Fuente: elaboración propia.

 Podría afirmarse que las variables “población” y “área” no tienen correlación a simple
vista y, además, el modelo lineal está muy afectado por los outliers.

C O NT I NU A R

3.2 Elementos de texto


Principalmente, se distinguirán las siguientes capas para añadir texto sobre una gráfica:

"ggtitle”

"xlab”

"ylab”

ggplot(df) +
geom_point(mapping = aes(population, area)) + geom_smooth(aes(population,
ggtitle("Población ~ área") +
xlab("Población") +
ylab("Área")
Figura 56. Añadir texto a una gráfica en Ggplot2.
Fuente: elaboración propia.

C O NT I NU A R

3.3 Facetting
Se puede descomponer una gráfica en tantas gráficas como valores únicos tenga una variable. Esto es muy
recomendable cuando se tienen variables categóricas, ya que se puede explicar una variable a través de una
categoría.
ggplot(df, mapping = aes(area)) +
geom_bar(aes(fill=state)) +
facet_wrap( ~ state)

Figura 57. Explicar variables a través de factores de una variable categórica.


Fuente: elaboración propia.
Lección 4 de 9

IV. Gráficos dinámicos Plotly

Plotly1 es un paquete destinado a la creación de gráficos interactivos. Durante este apartado, se mostrará
tanto su instalación como la manera de realizar algunos gráficos simples

1 Página web de Plotly. [En línea] Disponible en este enlace.

C O NT I NU A R

Se recomienda para la siguiente sección hacer uso del notebook:

PLOTLY_HTML.zip
1.2 MB

PLOTLY_RMD.zip
1.9 KB
C O NT I NU A R

 Para su instalación, simplemente buscamos el paquete Plotly.

# install.packages("plotly")

library(plotly)
## Loading required package: ggplot2
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout

C O NT I NU A R

Las gráficas pueden mostrarse a través de RStudio o en el


navegador web. Se comienza cargando la librería y
obteniendo unos vectores para realizar la primera
visualización.

C O NT I NU A R

Para realizar una visualización en Plotly, siempre se tiene que utilizar la función “plot_ly” y pasar nuestros
parámetros para dibujar los ejes “x” e “y”. En Plotly, se escoge el tipo de visualización a través del parámetro
type.

x <- c(1, 2, 3, 8, 7, 5, 6)
y <- c(4, 5, 6, 2, 10 ,12, 5)

C O NT I NU A R

Diagrama de dispersión
fig <- plot_ly (
x = x,
y = y,
type = "scatter"
)

fig
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter

Figura 58. Diagrama de dispersión con Plotly (I).


Fuente: elaboración propia.
C O NT I NU A R

Además del tipo de gráfica, en Plotly (para algunos tipos de visualización) se puede elegir el modo, es decir,
si existiera algún patrón de unión entre las observaciones que se fueran a pintar, por ejemplo: puntos y
líneas. Este parámetro es mode.

fig.sizes <- plot_ly (


x = x,
y = y,
type = "scatter",
mode = "markers",
size = 3,
alpha = 0.9
)

fig.sizes
Figura 59. Diagrama de dispersión con Plotly (II).
Fuente: elaboración propia.

C O NT I NU A R

fig.line <- plot_ly (


x = x,
y = y,
type = "scatter",
mode = "lines"
)

fig.line
Figura 60. Diagrama de dispersión con Plotly (III).
Fuente: elaboración propia.

C O NT I NU A R

 Podemos seleccionar ambos modos con lines+ markers.


fig.line <- plot_ly (
x = x,
y = y,
type = "scatter",
mode = "lines+markers"
)

fig.line

Figura 61. Diagrama de dispersión con Plotly (IV).


Fuente: elaboración propia.
C O NT I NU A R

 Se utilizará de nuevo el dataset iris para representar un diagrama de dispersión de las


variables “Sepal.Width” (ancho del sépalo) y “Petal.Width” (ancho del pétalo). Además se
representará el tamaño del punto por el ancho del sépalo y el color por el punto por el
tipo de especie.

C O NT I NU A R

Es importante tener en mente que, para utilizar un dataset en la


función “plot_ly”, deberá utilizarse el argumento “data” y siempre
que llamemos a una variable del dataframe para ser representada,
debe utilizarse el símbolo ~.

C O NT I NU A R

fig <- plot_ly(


data = iris, x = ~Sepal.Width, y = ~Petal.Width,
type = "scatter",
color = ~Species, size = ~Sepal.Width
)

fig
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter
## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

Figura 62. Diagrama de dispersión con Plotly (V).


Fuente: elaboración propia.

C O NT I NU A R
vec.1 <- c(1:100)
random_y <- rnorm(100, mean = 0)

data <- data.frame("norm_1" = vec.1,


"norm_2" =random_y)

fig <- plot_ly(data, x = ~norm_1, y = ~norm_2,


type = 'scatter',
mode = 'lines')

fig

Figura 63. Diagrama de dispersión con Plotly (VI).


Fuente: elaboración propia.
Así pues, se observa cómo el tamaño del punto va Del mismo modo, es posible representar
aumentando, contando el punto más pequeño con una anchura los datos de un vector como líneas. Para
del sépalo de 2 centímetros y el punto más grande con una ello, en el parámetro “mode”, deberá
anchura de sépalo de casi 4,5 centímetros. utilizarse el tipo lines.

C O NT I NU A R

Diagrama de barras

fig.bar <- plot_ly (


x = x,
y = y,
type = "bar"
)

fig.bar
Figura 64. Diagrama de barras (I).
Fuente: elaboración propia.

C O NT I NU A R

Como se puede comprobar, el parámetro “x” es tomado como índice y, por ello, el valor “4” está vacío. Este
hecho no afecta a los diagramas de barras con variables categóricas.

fig <- plot_ly(


x = c("Manzanas", "Naranajas", "Sandías"),
y = c(300, 245, 283),
name = "Ventas",
type = "bar"
)

fig

Figura 65. Diagrama de barras (II).


Fuente: elaboración propia.

C O NT I NU A R

 Para evitar el problema del primer diagrama de barras, es aconsejable utilizar


dataframes.
fig.bar <- plot_ly (
data = iris,
x = ~Sepal.Length,
y = ~Sepal.Width,
type = "bar",
color = ~Species
)

fig.bar

Figura 66. Diagrama de barras (III).


Fuente: elaboración propia.
 Se comprueba cómo para cada valor de la longitud del sépalo y la anchura del sépalo,
se muestra una barra vertical en función del tipo de especie de la flor.

C O NT I NU A R

Añadir texto a una gráfica

A una gráfica ya existente, se le agrega la función layout, a la cual se le pasarán los siguientes parámetros:

title

Título de la gráfica.

"xaxis"

Lista con el atributo title. Si se quiere desactivar este componente, se otorgará valor “FALSE” al atributo
“showgrid”.
"yaxis"

Lista con el atributo title. Si se quiere desactivar este componente, se otorgará valor “FALSE” al atributo
“showgrid”.

C O NT I NU A R

x <- c(1, 2, 3, 8, 7, 5, 6, 2, 4, 14, 16, 19, 23, 5, 8)


y <- c(4, 5, 6, 2, 10 ,12, 5, 9, 10, 11, 23, 4, 7, 6, 8)
f <- factor(c("VALUE1", "VALUE2", "VALUE1", "VALUE1", "VALUE2", "VALUE1", "
"VALUE1", "VALUE2", "VALUE1", "VALUE1", "VALUE2", "VALUE1", "
z <- sample(15:30, 15, replace = F)
d <- data.frame("x" = x, "y" = y, "f" = f, "z" = z)

fig <- plot_ly(iris, x = ~x, y = ~y,


text = ~f, color = ~f,
type = 'scatter', mode = 'markers',
marker = list(size = ~z, opacity = 0.5))

fig <- fig %>% layout(title = 'X ~ Y',


xaxis = list(title = "Vector X"),
yaxis = list(title = "Vector Y"))

fig
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3


Figura 67. Añadir texto a una gráfica en Plotly.
Fuente: elaboración propia.

 En la gráfica mostrada en la figura 67, se ha utilizado un tercer vector como tamaño


del punto.

C O NT I NU A R
Histograma

Se mostrarán dos gráficas diferentes para un histograma. En el primer caso, una gráfica de un histograma
de forma individual; posteriormente, se realizará una ligera transformación sobre el vector “x” (un vector de
500 elementos de una distribución normal), creando un nuevo vector en el que se sume 1 a cada elemento
del vector “x”, de esta forma, aparecerán dos histogramas completamente diferentes en la misma gráfica.  

Se aconseja al alumno probar diferentes parámetros de posición para cuando hay más de un histograma:
overlay, stack, group y relative.

C O NT I NU A R

fig <- plot_ly(x = ~rnorm(500),


alpha = 0.6,
type = "histogram")
Figura 68. Histograma en Plotly (I).
Fuente: elaboración propia.

C O NT I NU A R

fig <- plot_ly(alpha = 0.6)


fig <- fig %>% add_histogram(x = ~rnorm(500))
fig <- fig %>% add_histogram(x = ~rnorm(500) + 1)
fig <- fig %>% layout(barmode = "overlay") # "stack" | "group" | "overlay"

fig
Figura 69. Histograma en Plotly (II).
Fuente: elaboración propia.

C O NT I NU A R

Boxplot
fig <- plot_ly(y = ~rnorm(50), type = "box") %>%
layout(title = "Boxplot",
xaxis = list(showgrid = FALSE),
yaxis = list(showgrid = FALSE))

fig

Figura 70. Boxplot en Plotly.


Fuente: elaboración propia.

C O NT I NU A R
Diagrama de sectores

En un diagrama circular o diagrama de sectores, una variable se representa en forma de círculo y cada
valor de una variable tomará una porción del diagrama. En este caso, se representa como círculo el valor de
la longitud del sépalo y cada color será representado por el tipo de flor.

fig <- plot_ly(


data = iris,
labels = ~Species,
values = ~Sepal.Length,
type = 'pie'
) %>% layout(title = "Diagrama de sectores por Species",
xaxis = list(showgrid = FALSE),
yaxis = list(showgrid = FALSE))
fig
Figura 71. Diagrama de sectores en Plotly.
Fuente: elaboración propia.
Lección 5 de 9

V. Resumen

Repasa los conocimientos adquiridos en la unidad

A lo largo de esta unidad, se han mostrado las principales librerías de visualización de datos en R: desde
las funciones por defecto de graphics y las gráficas de capas con Ggplot2, hasta una introducción a la
realización de gráficos dinámicos en Plotly.
Por lo general, en todas las secciones se han tratado elementos similares, como la creación de gráficas
simples, añadir texto en los ejes y títulos, visualizar leyendas sobre los datos, agregación de color y
representación de diferentes tipos de gráficas, como diagramas de dispersión, gráficos de barras,
histogramas, boxplot, etc.
Lección 6 de 9

VI. Caso práctico con solución

Aplica los conocimientos adquiridos en esta unidad

Enunciado

Mediante el dataset diamonds del paquete Ggplot2, se realizarán las siguientes gráficas y

transformaciones4.

4 La información del dataset puede ser encontrada en este enlace.


Se pide

Gráficos básicos R: hacer un gráfico de barras con la cantidad de diamantes que hay para cada
valor de la variable cut.

Ggplot: realizar un histograma del precio que muestre la frecuencia acumulada de la variable cut.

Ggplot2: realizar un diagrama boxplot sobre el precio en función de la variable cut. Obtener un
diagrama diferente por cada variable clarity.

Gráficos básicos de R: realizar una gráfica múltiple de cuatro visualizaciones en donde, para cada
visualización, se realice un diagrama de dispersión en el que se tomen los valore: “x”, “y”, “z” y carat
contra depth.

Ggplot2: realizar un diagrama de dispersión con recta de ajuste del price sobre carat.

Plotly: tomar una muestra de 100 observaciones y realizar un diagrama de barras de la variable
cut contra price, en función de clarity.

Plotly: realizar un diagrama de sectores de la variable cut con los valores de carat.

VER SOLUCIÓN
Solución

Descarga los siguientes archivos para acceder a la solución.

EJERCICIO_1_SOLUCION_HTML.zip
1.4 MB

EJERCICIO_1_SOLUCION_RMD.zip
1.2 KB
Lección 7 de 9

VII. Enlaces de interés

Cheatsheet sobre Plotly.

ABRIR ENLACE

Cheatsheet sobre Ggplot2.

ABRIR ENLACE

Wickham, H. Ggplot2: elegant graphics for data analysis.


Libro sobre Ggplot2 (sin editorial) en el que se pueden ampliar los conocimientos sobre las principales
capas que se pueden agregar a una gráfica.

ABRIR ENLACE

Página web de PlotLy.


Web de PlotLy, donde pueden encontrarse ejemplos de un gráfico específico por secciones. Para
completar esta unidad, se recomienda visualizar los gráficos de la sección “Basic charts”.

ABRIR ENLACE

R graph gallery.
Web en la que podemos encontrar diferentes plantillas con ejemplos de código de prácticamente
cualquier tipo de gráfico en R.

ABRIR ENLACE
Lección 8 de 9

VIII. Glosario

El glosario contiene términos destacados para la


comprensión de la unidad

Graphics

Librería por defecto de R para visualización de datos.

Ggplot2

Librería dedicada a la creación y desarrollo de gráficos mediante la agregación de capas.

Plotly

Librería destinada a la creación de gráficos dinámicos y publicación de dashboards.

Diagrama de sectores

Visualización de datos en la que los valores categóricos se representan en torno a un círculo, y cada
categoría de una variable contiene valores de una variable continua.

Facetting

Mostrar la relación entre dos variables “x” e “y” en diferentes subgráficas en función de una tercera variable
categórica o valores únicos de una variable continua.
Lección 9 de 9

IX. Bibliografía

Chang, W. R graphics cookbook: practical recipes for visualizing data. O'Reilly Media; 2013.

También podría gustarte