Introducción

La representación gráfica de los datos constituye una herramienta fundamental para la visualización de los mismos y nos permite ofrecer un primer contacto con las características de los datos. En esta web se ofrecen los elementos esenciales para el uso de gráficos en R, mediante el paquete básico de R, pero también con la utilización de plotrix y de ggplot.

Variables cualitativas

a) Diagrama de barras

Para representar los datos cualitativos utilizando el diagrama de barras o el de sectores en R, debemos disponer del contaje de casos de las variables a representar. Para ello, como hemos visto anteriormente, debemos utilizar el comando table.

# importamos el archivo sobre el que vamos a trabajar
pacientes <- read.table("pacientes.txt", header =TRUE) # TRUE se puede escribir como T

# Añadimos diversos parámetros para mejorar el aspecto y su presentación
barplot(table(pacientes$Genero), # datos género
        main="Distribución género", # título
        col=c("red","blue"), # damos color a las barras
        ylab="Frecuencia") # etiqueta de las ordenadas

En la siguiente URL disponemos del listado de colores en R y cómo hacer referencia a cada color numéricamente: http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

b) Diagrama de sectores

En el diagrama de sectores disponemos de diversas opciones gráficas.

# indicamos que se muestren en paralelo los dos siguientes gráficos
par(mfrow=c(1,2))
# completamos diversos datos y aplicamos colores
pie(table(pacientes$Genero), 
    main="Distribución por género", # título
    col=c("red","blue"), # damos color a los sectores
    labels=c("Hombre", "Mujer"))
# otra representación con tantos por ciento
piepercent <- round(prop.table(table(pacientes$Genero))*100,2)
pie(table(pacientes$Genero), 
    main="Distribución por género", # título
    col=c("red","blue"), # damos color a los sectores
    labels=piepercent)
legend("topright", c("Hombre","Mujer"), cex=0.8, fill=c(2,4)) # añadimos la leyenda al gráfico

Variables cuantitativas

Para la representación de variables cuantitativas disponemos de diversas opciones gráficas.

a) Histograma

par(mfrow=c(1,2)) # indica que ambos gráficos se muestren en una misma imagen
hist(pacientes$Colesterol, col=c("Orange"), # color de las columnas
     main="Niveles de Colesterol", # título principal
     xlab="Colesterol (en mg/dl)", # etiqueta (label) del eje x
     ylab="Frecuencia") # etiqueta del eje y
hist(pacientes$Glucemia, 
     col=c("Blue"), 
     main="Niveles de Glucemia",
     xlab="Glucemia (en mg/dl)",
     ylab="Frecuencia", 
     breaks=10) # indicamos el número de intervalos de los datos aunque también

    # podemos simplemente añadir la cifra 10 o la que nos interese sin incluir
    # el argumento "breaks" ya que lo interpreta igualmente

b) Boxplot

El boxplot nos muestra de forma gráfica la distribución de una variable cuantitativa con el formato de caja.

# Distribución de la edad
par(mfrow=c(1,1)) # con par(mfrow=c()) podemos indicar el número de figuras que se muestran
# en este caso una imagen
# Comparación de la edad en ambos sexos (variable edad en función sexo)
# Otra forma sería separar el grupo en dos subgrupos en función de una variable determinada
# utilizando el comando split: boxplot(split(pacientes$Edad, pacientes$Genero))
# Incluimos colores e información diversa
boxplot(pacientes$Edad ~ pacientes$Genero, 
        main="Distribución Edad según Género", # incluimos el título
        xlab="Años", ylab="Género", # etiquetas de x e y
        names=c("Hombre", "Mujer"), # indica cada grupo de género
        horizontal=TRUE, # dispone en horizontal los boxplots
        col=c("red","yellow")) # colorea los boxplots

stem(pacientes$Edad) # diagrama en ramas y hojas (stem-and-leaf)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   4 | 3589
##   5 | 023569
##   6 | 24467
##   7 | 1135889
##   8 | 01

Tabla de datos de variables cualitativas

# Tabla de datos de Género
table(pacientes$Genero) # en números absolutos
## 
##  H  M 
## 11 13
table(pacientes$Genero, pacientes$IAM) # tabla de 2x2 entre Genero e IAM
##    
##     No Si
##   H  8  3
##   M  7  6
round(prop.table(table(pacientes$Genero, pacientes$IAM))*100, 2) # en frecuencia relativa con la función prop.table() y redondeado con round() y dos decimales
##    
##        No    Si
##   H 33.33 12.50
##   M 29.17 25.00
# Otras tablas de datos que pueden ser intersantes para conocer la frecuencia de datos cualitativos
table(pacientes$IAM)
## 
## No Si 
## 15  9
table(pacientes$Trat)
## 
## No Si 
## 15  9

Variables cuantitativas:

Resumen numérico básico de variables cuantitativas. En este ejemplo mostramos la forma de crear subgrupos de datos en un dataframe sobre una variable determinada. Esto es muy útil para separar los subgrupos existentes según los niveles de una variable cualitativa y poder comparar las variables cuantitativas entre ambos grupos. Por ejemplo, en la variable IAM tenemos un subgrupo de pacientes con infarto en el que el valor de IAM es “Si” y el subgrupo sin IAM cuyo valor de la variable es “No”. Creamos dos vectores con los valores de colesterol de cada grupo según la variable IAM.

# Debemos crear un subgrupo de datos (subsetting): con la función "which"
iamNo <- pacientes[which(pacientes$IAM == "No"), "Colesterol"]
iamSi <- pacientes[which(pacientes$IAM == "Si"), "Colesterol"]

###### representación para comparar los valores de colesterol entre pacientes
###### con IAM y sin IAM
# creación de colores transparentes
mycol2 <- rgb(255,255,0, max=255, alpha=125) # color amarillo
mycol <- rgb(0,0,255, max=255, alpha=125) # color azul

Histogramas

# histogramas representados como gráficos paralelos
par(mfrow=c(1,2))
# un histograma para cada subgrupo 
hist(iamNo,
        main="Niveles colesterol con IAM", # título del gráfico
        col="blue", # color de las barras
        xlab="Pacientes sin IAM", ylab="Colesterol", # etiquetas de los ejes x e y
        xlim=c(100,300), # indicamos los límites del eje x
        ylim=c(0,5), # indicamos los límites del eje y
        breaks=5) # este parámetro establece el número de intervalos de datos

hist(iamSi,
        main="Niveles colesterol con IAM", # título del gráfico
        col="gold", # color de las barras
        xlab="Pacientes con IAM", ylab="Colesterol", # etiquetas de los ejes x e y
        xlim=c(100,300), # indicamos los límites del eje x
        ylim=c(0,5), # indicamos los límites del eje y
        breaks=5) # este parámetro establece el número de intervalos de datos

# histogramas con todos los datos en el mismo gráfico con transparencia
par(mfrow=c(1,1))
hist(iamNo,
        main="Niveles colesterol según padecer IAM o no", # título del gráfico
        col=rgb(1,0,0,0.5), # color de las barras
        xlab="Pacientes sin y con IAM", ylab="Colesterol", # etiquetas de los ejes x e y
        xlim=c(100,300), # indicamos los límites del eje x
        ylim=c(0,5), # indicamos los límites del eje y
        breaks=5) # este parámetro establece el número de intervalos de datos
hist(iamSi,
        col=rgb(0,0,1,0.5), # color de las barras
        xlim=c(100,300), # indicamos los límites del eje x
        ylim=c(0,5), # indicamos los límites del eje y
        breaks=5, # este parámetro establece el número de intervalos de datos
        add=T)

Boxplots

# comparación mediante boxplot
boxplot(Colesterol ~ IAM, 
        data=pacientes,
        main="Colesterol en pacientes sin IAM y con IAM",
        ylab="Colesterol (mg/dl)", 
        xlab="IAM")

# otra forma de comparar boxplots de dos grupos de colesterol según tengan IAM o no
# utilizando los subgrupos creados anteriormente
boxplot(iamNo, iamSi,
        main="Colesterol en pacientes sin IAM y con IAM",
        ylab="Colesterol (mg/dl)",
        xlab="IAM",
        names=c("No", "Sí"))

Package pyramid

# instalar y llamar a la libreria pyramid
# install.packages('pyramid')
library(pyramid)

# vectores de datos comparación grupos de edad en hombres y mujeres
mujeres <- c(350, 370, 450, 400, 350, 250, 150, 130, 80)
hombres <- c(300, 400, 440, 350, 340, 230, 120, 100, 60)
edad <- c("0-10", "11-21", "21-30", "31-40", "41-50", "51-60", "61-70", "71-80", "81-90")

# creación del dataframe con los tres vectores anteriores
poblacion <- data.frame(hombres, mujeres, edad)

# creación del gráfico con el comando adecuado que permite configurar varios parámetros:
pyramid(poblacion,
    Llab="Hombres", Rlab="Mujeres", Clab="Edad",
    Lcol="Orange", Rcol="Blue",
    Laxis=c(0,100,200,300,400,500),
    main="Distribución de edad y género")

Package treemap

##### treemap (library(treemap)) #####
# Create dataset
# install.packages('treemap')
library('treemap')
## Registered S3 methods overwritten by 'tibble':
##   method     from  
##   format.tbl pillar
##   print.tbl  pillar
count <- c(6292,5567,8686,4184,3971,2713,1856,1419,2003,1044)
diseases <- c("DM2","HTA","Colest","Smoke","Fever","HCV","Cancer","HIV","AD","Depres")
dis <- data.frame(count,diseases)

treemap(dis,
# data
index="diseases",
vSize="count",
type="index",
# Main
title="Frequency of Diseases",
palette="Dark2",
# Borders:
border.col=c("black"), border.lwds=1,
# Labels
fontsize.labels=0.5,
fontcolor.labels="white",
fontface.labels=1,
bg.labels=c("transparent"),
align.labels=c("left", "top"),
overlap.labels=0.5,
inflate.labels=T                        # If true, labels are bigger when rectangle is bigger.
)
## Warning in if (class(try(col2rgb(bg.labels), silent = TRUE)) == "try-error")
## stop("Invalid bg.labels"): the condition has length > 1 and only the first
## element will be used

Package ggplot2

# ggplot2 some examples
library(ggplot2)
ggplot(pacientes, aes(Genero, Colesterol)) +
 geom_boxplot(colour="red") +
 ylab("Colesterol (mg/dl") +
 xlab("Género") +
 ggtitle("Colesterol y Género") +
 theme(plot.title = element_text(hjust=0.5) )