La visualización de datos es una de las partes más importantes del análisis de datos, que permite de manera gráfica representar la información con el fin de poder resumirlos e interpretarlos
Algunas consideraciones
Tipo de variable | Tipos de escala | Tipo de gráfico | Sintaxis R |
---|---|---|---|
Cualitativa | Nominal | diagrama de torta | pie(table(x)) |
Ordinal | diagrama de barras | barplot(table(x)) | |
diag.barras dobles | barplot(table(x,y)) | ||
diag. mosaico | plot(x,y) | ||
Cuantitativa | De intervalo | diagrama de tallos y hojas | stem(x) |
histograma | hist(x) | ||
De razón | diagrama de puntos | plot(x,y) | |
diagrama de densidad | density(x) | ||
diagrama de cajas | boxplot(x) | ||
diagrama de linea | plot(x, type=“l”) | ||
cc=c(20, 10, 20, 20, 20, 20, 20, 20, 20, 30, 20, 20, 20, 10, 30, 20, 20, 30, 20,
30, 30, 20, 10, 30, 20, 20, 30, 30, 10, 20, 10, 20, 20, 20, 10, 20, 10, 20,
20, 30, 30, 30, 10, 30, 20, 20, 20, 20, 20, 20, 10, 20, 30, 30, 10, 10, 10,
20, 10, 20, 10, 30, 20, 10, 20, 30, 10, 30, 30, 30, 20, 30, 30, 30, 30, 30,
30, 20, 10, 30, 10, 20, 20, 10, 20, 20, 20, 20, 10, 20)
t1=table(cc)
pie(t1)
cc=c(20, 10, 20, 20, 20, 20, 20, 20, 20, 30, 20, 20, 20, 10, 30, 20, 20, 30, 20,
30, 30, 20, 10, 30, 20, 20, 30, 30, 10, 20, 10, 20, 20, 20, 10, 20, 10, 20,
20, 30, 30, 30, 10, 30, 20, 20, 20, 20, 20, 20, 10, 20, 30, 30, 10, 10, 10,
20, 10, 20, 10, 30, 20, 10, 20, 30, 10, 30, 30, 30, 20, 30, 30, 30, 30, 30,
30, 20, 10, 30, 10, 20, 20, 10, 20, 20, 20, 20, 10, 20)
labs=c("Ing. Mecánica","Ing. Civil ","Ing.Sistemas")
pct=round(table(cc)/sum(table(cc))*100)
labs=paste(labs, pct);labs=paste(labs, "%", sep = " ")
t1=table(cc)
pie(t1,
labels=labs,
main=" Distribución por carrera")
ev=c(5,13,30,52,35)
barplot(ev)
ev=c(5,13,30,52,35)
ev=as.table(ev)
names(ev)=c("MR","R","B","MB","E")
barplot(ev, col=c("red","yellow","orange","green","blue"),
main = "Evaluación proceso de inducción",
las=1)
conteo <- table(mtcars$vs, mtcars$gear)
barplot(conteo)
counts <- table(mtcars$vs, mtcars$gear)
rownames(counts)=c("Montor en linea", "Motor en V")
barplot(counts, main="Número de cambios adelante por Tipo de motor",
xlab="Número de cambios adelante ",
col=c("dodgerblue3","orange"),
legend = rownames(counts),
las=1)
mosaicplot(~gear + vs,
data = mtcars,
color = c("dodgerblue3","orange"),
las = 1)
nf=c(4.1, 2.7, 3.1, 3.2, 3.0, 3.2, 2.0, 2.4, 1.6, 3.2, 3.1, 2.6, 2.0, 2.4, 2.8,
3.3, 4.0, 3.4, 3.0, 3.1, 2.7, 2.7, 3.0, 3.8, 3.2, 2.2, 3.5, 3.5, 3.8, 3.5,
3.9, 4.2, 4.3, 3.9, 3.2, 3.5, 3.5, 3.7, 4.1, 3.7, 3.5, 3.6, 3.2, 3.1, 3.4,
3.0, 3.0, 3.0, 2.7, 1.7, 3.6, 2.1, 2.4, 3.0, 3.1, 2.5, 2.5, 3.6, 2.2, 2.4,
3.1, 3.3, 2.7, 3.7, 3.0, 2.7, 3.0, 3.2, 3.1, 2.4, 3.0, 2.7, 2.5, 3.0, 3.0,
3.0, 3.2, 3.1, 3.8, 4.1, 3.7, 3.5, 3.0, 3.7, 3.7, 4.1, 3.7, 3.9, 3.7, 2.0)
# Diagrama de tallos y hojas
stem(nf)
The decimal point is at the |
1 | 67
2 | 00012244444
2 | 555677777778
3 | 0000000000000011111111222222223344
3 | 555555566677777777888999
4 | 0111123
hist(nf)
h1=hist(nf,
main = "Nota final matemáticas fundamentales",
xlab = "nota", ylab="frecuencias absolutas",
labels=TRUE,
col="dodgerblue3",
ylim = c(0,30))
abline(v=3,col="red")
nf=c(4.1, 2.7, 3.1, 3.2, 3.0, 3.2, 2.0, 2.4, 1.6, 3.2, 3.1, 2.6, 2.0, 2.4, 2.8,
3.3, 4.0, 3.4, 3.0, 3.1, 2.7, 2.7, 3.0, 3.8, 3.2, 2.2, 3.5, 3.5, 3.8, 3.5,
3.9, 4.2, 4.3, 3.9, 3.2, 3.5, 3.5, 3.7, 4.1, 3.7, 3.5, 3.6, 3.2, 3.1, 3.4,
3.0, 3.0, 3.0, 2.7, 1.7, 3.6, 2.1, 2.4, 3.0, 3.1, 2.5, 2.5, 3.6, 2.2, 2.4,
3.1, 3.3, 2.7, 3.7, 3.0, 2.7, 3.0, 3.2, 3.1, 2.4, 3.0, 2.7, 2.5, 3.0, 3.0,
3.0, 3.2, 3.1, 3.8, 4.1, 3.7, 3.5, 3.0, 3.7, 3.7, 4.1, 3.7, 3.9, 3.7, 2.0)
plot(density(nf))
plot(density(nf),
main="Distribución notas de matemátias fundamentales",
col="dodgerblue3",
lwd=5,
las=1,
xlab = "Nota",
ylab = "Densidad")
boxplot(nf)
boxplot(nf, main="Nota final matemáticas fundamentales",
col="dodgerblue3",
las=1)
abline(h=3, col="red")
boxplot(nf~cc)
nf=c(4.1, 2.7, 3.1, 3.2, 3.0, 3.2, 2.0, 2.4, 1.6, 3.2, 3.1, 2.6, 2.0, 2.4, 2.8,
3.3, 4.0, 3.4, 3.0, 3.1, 2.7, 2.7, 3.0, 3.8, 3.2, 2.2, 3.5, 3.5, 3.8, 3.5,
3.9, 4.2, 4.3, 3.9, 3.2, 3.5, 3.5, 3.7, 4.1, 3.7, 3.5, 3.6, 3.2, 3.1, 3.4,
3.0, 3.0, 3.0, 2.7, 1.7, 3.6, 2.1, 2.4, 3.0, 3.1, 2.5, 2.5, 3.6, 2.2, 2.4,
3.1, 3.3, 2.7, 3.7, 3.0, 2.7, 3.0, 3.2, 3.1, 2.4, 3.0, 2.7, 2.5, 3.0, 3.0,
3.0, 3.2, 3.1, 3.8, 4.1, 3.7, 3.5, 3.0, 3.7, 3.7, 4.1, 3.7, 3.9, 3.7, 2.0)
cc=c(20, 10, 20, 20, 20, 20, 20, 20, 20, 30, 20, 20, 20, 10, 30, 20, 20, 30, 20,
30, 30, 20, 10, 30, 20, 20, 30, 30, 10, 20, 10, 20, 20, 20, 10, 20, 10, 20,
20, 30, 30, 30, 10, 30, 20, 20, 20, 20, 20, 20, 10, 20, 30, 30, 10, 10, 10,
20, 10, 20, 10, 30, 20, 10, 20, 30, 10, 30, 30, 30, 20, 30, 30, 30, 30, 30,
30, 20, 10, 30, 10, 20, 20, 10, 20, 20, 20, 20, 10, 20)
labs=c("Ing. Mecánica","Ing. Civil ","Ing.Sistemas")
boxplot((nf~cc),main="Nota final matemáticas fundamentales por carrera",
col="dodgerblue3")
abline(h=3, col="red")
abline(h=4, col="blue")
t=1:300 ; x=w=rnorm(300,0,1); x<-w; for(t in 2:300) x[t]<-x[t-1]+w[t]
plot(x, type="l",
main="Número de pasajeros",
col="dodgerblue3",
lwd = 4)
x=rnorm(100,100,20)
y=rnorm(100,100,25)
z=rbinom(100,4,0.30)
t=1:100
pie(table(z))
barplot(table(z))
stem(x)
hist(x)
boxplot(x)
plot(x,y)
plot(t,y, type="l")
plot(density(x))
Hasta el momento se ha utilizado R base para la elaboración de gráficos, a continuación se presentan algunos paquetes que mejoran la construcción de gráficos y su visualización :
Este paquete de R permite la construcción de gráficos utilizando para ello una “grámatica” de los grafocos, la cual incorpora componentes como : los datos (data), un conjunto de coordenadas ( ), una serie de geometrias (geoms)
Componentes de un gráfico en ggplot2:
Data: capa de los datos
Aesthetics: capa estetica (aes), definimos las variables a utilizar en el gráfico
Geometries: capa de geometrias, se define el tipo de gráfica a realizar
Facets: capa de facetas, permite detallar la gráfica por categorias
Statistics: capa de estadística, permite agregar modelos
*Coordinates: capa de coordenadas, permite ajustar las escalas de los ejes
Theme: capas de características del gráfico que no dependen de los datos
Para empezar, inicialmente se instalar el paquete
install.packages("ggplo2")
Y luego habilitarlo para su uso
library(ggplot2)
Se empieza con el primero de los lienzo, donde se declara la data que vamos a utilizar
fig=ggplot(data=casas)
fig
Como segundo paso se definen las variables que se van a utilizar en la construcción del gráfico
fig=ggplot(data=casas, aes(x=area.con , y=precio))
fig
Luego de tener definida la base y las variables a utilizar se indica la geometria a utilizar, en este caso se trata de puntos
fig=ggplot(data=casas, aes(x=area.con , y=precio))+
geom_point()
fig
Otros elementos a utilizar son :
fig=ggplot(data=casas, aes(x=area.con , y=precio))+
geom_point() + facet_wrap(~ mes)
fig
fig=ggplot(data=casas, aes(x=area.con , y=precio))+
geom_point() + facet_wrap(~ mes)+stat_smooth(method = "loess" , formula =y ~ x)
fig
fig=ggplot(data=casas, aes(x=area.con , y=precio)) + geom_point() +
facet_wrap(~ mes) +
stat_smooth(method = "loess" , formula =y ~ x) +
coord_cartesian(xlim = c(150,300))
fig
fig=ggplot(data=casas, aes(x=area.con , y=precio)) + geom_point() +
facet_wrap(~ mes) +
stat_smooth(method = "loess" , formula =y ~ x) +
coord_cartesian(xlim = c(150,300)) +
theme_classic()
fig
casas$mes=as.factor(casas$id)
fig2 = ggplot(data=casas, aes(x=precio, y=mes)) +
geom_boxplot(fill="lightSalmon",
color="black")+
geom_point(color="blue")+
ggtitle("Precio de casas por mes")+
labs(x="miles de pesos " , y="mes")
fig2
fig3=ggplot(casas, aes(edad)) +
geom_histogram(bins = 7,fill="#69b3a2", color="#e9ecef", alpha=0.9)+
theme_minimal() +
labs(x = "años", y = "frecuencia absoluta") +
ggtitle("Antigüedad de las casas")
fig3
fig=ggplot(data = diamonds, aes(x = cut, fill = color)) +
geom_bar(colour= "black", size = 0.3 ) +
coord_polar()
fig
# Libraries
library(tidyverse)
library(hrbrthemes)
NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
library(viridis)
Loading required package: viridisLite
# se crea la base
data <- data.frame(
factor=c( rep("A",50), rep("B",55), rep("B",30), rep("C",20), rep('D',10)),
valor=c(rnorm(50,10,18),rnorm(55,13,26),rnorm(30,18,15),rnorm(20, 25,34),rnorm(10,12,10)))
# Plot
data %>%
ggplot( aes(x=factor, y=valor, fill=factor)) +
geom_boxplot() +
scale_fill_viridis(discrete = TRUE, alpha=0.6) +
geom_jitter(color="black", size=0.4, alpha=0.9) +
theme_ipsum() +
theme(
legend.position="none",
plot.title = element_text(size=11)
) +
ggtitle("Gráfico de cajas con puntos- geom_jitter") +
xlab("")
Este es un paquete especializado en la creación de gráficos dinámicos que emplea inrnamente javascript.
Este paquete permite crear varios tipos de gráficos como: diagramas de dispersión, de burbuja, de línea, serie de tiempo, mapas de calor, treemap, gráficos de barras, redes, entre otros.
Gran parte de los gráficos se realizan con la función : ** hchart() ** que es aplicada a objetos
Inicialmente se instala el paquete por una única vez
# install.packages("highcharter")
Luego se carga para utilizar sus funciones
library(highcharter)
hchart(casas, "scatter", hcaes(x = precio, y = area.con, group = mes)) %>%
hc_title(text = "Precio por área construida")
# paquetes requeridos
# install.packages("ggplot2")
library(ggplot2)
# install.packages("ggbeeswarm")
library(ggbeeswarm)
# construcción de la data
y <- round(rnorm(200), 1)
df <- data.frame(y = y,
grupo = sample(c("G1", "G2", "G3"),
size = 200,
replace = TRUE))
# gráfico
ggplot(df, aes(x = grupo, y = y, color = grupo)) +
geom_beeswarm(cex = 3)
# construccion de la data
# Datos de muestra
df <- diamonds[1:100, c("color", "depth")]
# instalacion de paquetes
# install.packages("ggridges")
library(ggridges)
# install.packages("ggplot2")
library(ggplot2)
# construcción de gráfico
ggplot(df, aes(x = depth, y = color, fill = color, color = color)) +
geom_density_ridges()
Picking joint bandwidth of 0.678
# Datos
set.seed(3)
x <- rnorm(100)
y <- rnorm(150, 1)
# Estimaciones de densidad
denx <- density(x)
deny <- density(y)
# Gráfico
plot(denx,
ylim = c(0, max(c(denx$y, deny$y))),
xlim = c(min(c(denx$x, deny$x)),
max(c(denx$x, deny$x))),
las=1, main=" ", xlab=" ")
lines(deny)
# Colorear las áreas
polygon(denx, col = rgb(0.78, 0.89, 1, alpha = 0.6))
polygon(deny, col = rgb(0.41, 0.44, 1, alpha = 0.6))
Tomado de : https://r-charts.com/es/distribucion/ggbeeswarm/
Paquete para el trabajo en Estadística Medica que se utiliza para la construcción de un diagrama de radar
# install.packages("fmsb")
library(fmsb)
set.seed(1)
df <- data.frame(rbind(rep(10, 8),
rep(0, 8),
matrix(sample(0:10, 8),nrow = 1)))
colnames(df) <- paste("Var", 1:8)
radarchart(df,
cglty = 1, cglcol = "gray",
pcol = 4, plwd = 2,
pfcol = rgb(0, 0.4, 1, 0.25))
# install.packages("fmsb")
library(fmsb)
# matriz de datos
df2 <- data.frame(rbind(rep(10, 8), rep(0, 8),
matrix(sample(0:10, 24,
replace = TRUE),
nrow = 3)))
colnames(df2) <- paste("Var", 1:8)
# colores de areas
areas <- c(rgb(1, 0, 0, 0.25),
rgb(0, 1, 0, 0.25),
rgb(0, 0, 1, 0.25))
radarchart(df2,
cglty = 1, # Tipo de línea del grid
cglcol = "gray", # Color líneas grid
pcol = 2:4, # Color para cada línea
plwd = 2, # Ancho para cada línea
plty = 1, # Tipos de línea
pfcol = areas) # Color de las áreas
legend("topright",
legend = paste("Grupo", 1:3),
bty = "n", pch = 20, col = areas,
text.col = "grey25", pt.cex = 2)
# Import tidyverse to have access to dplyr and ggplot2
library(tidyverse)
# Create a simple dummy data frame with columns "variable" and "value"
data <- data.frame(variable = paste("Var", 1:10),
value = sample(10, replace = TRUE))
# Create grafico en coordenadas
plot <- ggplot(data,aes(x = variable,y = value,
fill = factor(variable))) +
geom_col(width = 1, color = "white") +
coord_polar() + # vonvierte en grafico circular
labs(x = "", y = "",title = "Titulo", # add titulo, subtitulo, nota
subtitle = "Subtitulo",
caption = "Nota" ) +
theme_minimal() + # borra caracteristicas del grafico
theme( # asigna caracteristicas
legend.position = "none",
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.ticks = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(face = "bold"),
plot.title = element_text(size = 24, face = "bold"),
plot.subtitle = element_text(size = 12))
plot # imprime grafico
par(cex=0.3, cex.axis=.5, cex.lab=.5, cex.main=.5, cex.sub=.5)
# install.packages(calendR)
library(calendR)
~~ Package calendR
Visit https://r-coder.com/ for R tutorials ~~
# Datos
set.seed(2)
datos <- rnorm(365)
# Vertical calendar
calendR(year = 2021,
special.days = datos,
low.col = "#FCFFDD",
special.col = "#00AAAE",
gradient = TRUE,
legend.pos = "none",
orientation = "portrait",
title.size = 7,
subtitle.size = 5,
text.size = 2,
weeknames.size = 3,
day.size = 2, # tamaño numero del dia
months.size = 6,
papersize="A3") # tamaño nombre del mes
Tomado de : https://r-charts.com/es/ranking/radar-chart/
En el siguiente enlace encontrará los archivos para la construcción de los mapas en formato .shp (debe copiar los cuatro archivos)
Archivos .shp : https://sites.google.com/site/seriescol/shapes
A continuación el código para el mapa de Cali sin información
require(sp)
require(rgdal)
require(raster)
cali=shapefile("map/cali/cali.shp") # importa mapa en formato .shp
plot(cali) # gráfico de Cali
Para mostrar la información se debe incorporar un vector al objeto cali que contiene la información para el mapa. este objeto en formato lista tiene incorporada una data que contiene varias columnas al cual se le adiciona la información a publicar.
En el caso de Cali tiene 22 comunas se adiciona un vector con 22 valores con el nombre de indice
cali=shapefile("map/cali/cali.shp") # importa mapa en formato .shp
cali@data$indice=rnorm(22) # se genera variable a ilustrar
spplot(cali[,21])
Para el caso de Colombia se obtiene el archivo depto.shp que contiene la información de Colombia por departamentos (33)
require(sp)
require(rgdal)
require(raster)
mapco=shapefile("map/colombia/depto.shp") # importa mapa en formato .shp
plot(mapco) # gráfico de Colombia
Para representar información en el mapa seden ingresar una vector con 33 valores, igual numero de departamentos en el mismo orden en que se encuentran los nombre de los departamento en el archivo mapco
mapco$NOMBRE_DPT
[1] "ANTIOQUIA"
[2] "ATLANTICO"
[3] "SANTAFE DE BOGOTA D.C"
[4] "BOLIVAR"
[5] "BOYACA"
[6] "CALDAS"
[7] "CAQUETA"
[8] "CAUCA"
[9] "CESAR"
[10] "CORDOBA"
[11] "CUNDINAMARCA"
[12] "CHOCO"
[13] "HUILA"
[14] "LA GUAJIRA"
[15] "MAGDALENA"
[16] "META"
[17] "NARIÑO"
[18] "NORTE DE SANTANDER"
[19] "QUINDIO"
[20] "RISARALDA"
[21] "SANTANDER"
[22] "SUCRE"
[23] "TOLIMA"
[24] "VALLE DEL CAUCA"
[25] "ARAUCA"
[26] "CASANARE"
[27] "PUTUMAYO"
[28] "AMAZONAS"
[29] "GUAINIA"
[30] "GUAVIARE"
[31] "VAUPES"
[32] "VICHADA"
[33] "ARCHIPIELAGO DE SAN ANDRES PROVIDENCIA Y SANTA CATALINA"
Si se quiere representar un mapa con las muertes causadas por covid en Colombia por departamento debemos crear una tabla con la información relacionada con esta variable por departamento en el mismo orden contenida en el archivo depto.shp y adicionarla como variable : mapcol@data$muertes
De la base de datos abiertos Colombia se obtiene la siguiente información correspondiente al número de fallecidos por Covid19, durante el periodo marzo 2019 a agosto 25 de 2021
# colombia=readRDS("data/Colombia.RDS")
# colombia$departamento_nom= str_to_upper(colombia$departamento_nom)
# t=table(colombia$departamento_nom,colombia$estado)
fallecidos=c(15174,3876,26516,807,2417,2151,880,1333,2388,3487,6495,382,2880,
1296,1380,2076,2861,3961,1635,2119,6934,1546,3411,11929,400,844,
620,249,29,87,17,45,133)
require(sp)
require(rgdal)
require(raster)
require(RColorBrewer)
mi.palette <- brewer.pal(n = 7, name = "OrRd") # paleta de colores
mapco=shapefile("map/colombia/depto.shp") # importa mapa en formato .shp
# colombia=readRDS("data/Colombia.RDS")
# colombia$departamento_nom= str_to_upper(colombia$departamento_nom)
# t=table(colombia$departamento_nom,colombia$estado)
fallecidos=c(15174,3876,26516,807,2417,2151,880,1333,2388,3487,6495,382,2880,
1296,1380,2076,2861,3961,1635,2119,6934,1546,3411,11929,400,844,
620,249,29,87,17,45,133) # vector con información
mapco@data$fallecidos=fallecidos # se adiciona variable con 33 valores = 33 dptos, en mismo orden
spplot(mapco[,6], col.regions = mi.palette, cuts = 6) # mapa
# Grafico normal
x=rnorm(100,100,20)
plot(density(x))
par(mar = c(5, 4, 4, 2) + 0.1)
x=rnorm(100,100,20)
plot(density(x))
par(mai = c(1.5, 1.5, 1.5, 1.5))
x=rnorm(100,100,20)
plot(density(x))
### Matriz de gráficos mfrow = c(2, 2)
x=rnorm(100,100,20)
y=rnorm(100,100,25)
z=rbinom(100,4,0.30)
t=1:100
par(mfrow = c(2, 2) ) # definición de la matriz
plot(density(x))
barplot(table(z))
hist(x)
plot(x,y)
par(mfrow = c(2, 2), # matriz de graficos 2x2
oma = c(3, 5, 2, 4) ) # margenes de la imagen
plot(density(x))
barplot(table(z))
hist(x)
plot(x,y)
x=rnorm(100,100,20)
plot(density(x),cex.lab=.8, # tamaño de etiqueta ejes
cex.axis=2, # tamaño escalas de los ejes
cex.main=1.5, # tamaño del titulo
cex.sub=1) # tamaño del subtitulo
Este paquete permite la construcción de tableros que pueden ser publicados en formato html. A continuación se describen las principales características y la forma que podemos construir un tablero
Iniciaremos cargando el paquete (por una única vez)
install.packages("flexdashboard")
Tambien debemos activarlo, aunque este procedimiento viene en el formato que nos proporciona RStudio
library(flexdashboard)
Inicialmente utilizamos la plantilla que para este propósito tiene RStudio, entrando por el menú : File/ New file / RMarkdown..
Este procedimiento genera un formato para un tablero que puede ser modificado o ajustado a nuestras necesidades
En este formato podemos distinguir varias partes :