Entornos graficos en R

Por razones históricas, R tiene al menos tres motores gráficos que son usados frecuentemente

ggplot2 se ha convertido en el más popular, así que nos concentraremos en su uso.

ggplot2

ggplot permite generar gráficos 2D basados en capas, que se pueden adicionar en infinitas combinaciones, empoderando al científico para que pueda realizar gráficos imposibles para otros programas tradicionales. Como comprobación de esto, se le puede ver citado en artículos científicos de alto impacto, en los cuales jamás hubieran podido usar programas tradicionales o la versión básica de gráficos de R-base

http://rstudio-pubs-static.s3.amazonaws.com/260498_0de9311e21854487b056562422023ddb.html

Gramática de ggplot2

Siempre se inicia con ggplot(), incluyendo dataset y aesthetics (opcional)

Componentes de la gramática de capas

  • Data
  • Aesthetic mapping
  • Statistical transformations
  • Scales
  • Coordinate system
  • Position adjustments
  • Faceting

Condición:

  • tipo de dato Dataframe
  • Más fácil de guardar y reproducir
  • Usualmente se usa dplyr antes de graficar

Aesthetic mapping

  • Se definen con aes()
  • Significado de aesthetic en ggplot: “Algo que se puede ver”
  • Cada geom acepta un conjunto de aesthetics

Ejemplos: - position (i.e., en el eje “x” y “y”) - color (color “exterior”) - fill (color “interior”) - shape (de los puntos) - linetype - size

Graficos de Barras

# install.packages("ggplot2")
library(ggplot2)
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
set.seed(1234)
wdata = as_data_frame(data.frame(sex = factor(rep(c("F", "M"), each=200)), weight = c(rnorm(200,55),rnorm(200,58))))
wdata
## # A tibble: 400 x 2
##    sex   weight
##    <fct>  <dbl>
##  1 F       53.8
##  2 F       55.3
##  3 F       56.1
##  4 F       52.7
##  5 F       55.4
##  6 F       55.5
##  7 F       54.4
##  8 F       54.5
##  9 F       54.4
## 10 F       54.1
## # ... with 390 more rows
mu <- wdata %>% group_by(sex) %>% summarize(grp.mean = mean(weight))
mu
## # A tibble: 2 x 2
##   sex   grp.mean
##   <fct>    <dbl>
## 1 F         54.9
## 2 M         58.1
a <- ggplot(wdata, aes(x = weight))

a + geom_area(stat = "bin", color = "black", fill = "#00AFBB")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

a + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

a + geom_histogram(bins = 100)+ theme_bw()

Agregando Color por sexo

a + geom_histogram(aes(color = sex), fill = "white", bins = 50) + theme_minimal()

a + geom_histogram(aes(color = sex, fill = sex), alpha =0.4, position = "identity", bins = 50) + scale_fill_manual(values = c("#00AFBB", "#E7B800")) + scale_color_manual(values = c("#00AFBB", "#E7B800")) 

Gráfico de densidad

También conocido como gráfico de densidad de Kernel y gráfico de densidad de traza.

Un gráfico de densidad visualiza la distribución de datos en un intervalo o período de tiempo continuo. Este gráfico es una variación de un Histograma que usa el suavizado de cerner para trazar valores, permitiendo distribuciones más suaves al suavizar el ruido.

Densidad total

a + geom_density()

combinando histograma y densidad

a + geom_histogram(aes(y = ..density..),color = "black", fill = "white") + geom_density(alpha = 0.2, fill = "#FF6666") + theme_minimal()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

media y mediana

a + geom_density(color = "black", fill = "gray") + geom_vline(aes(xintercept = mean(weight)), color = "red", linetype = "dashed", size = 1) + geom_vline(aes(xintercept = median(weight)), color = "blue", linetype = 4, size = 1)

Histograma y densidad por sexo

a + geom_histogram(aes(y = ..density.., color = sex, fill = sex),  alpha = 0.4, position = "identity") + geom_density(aes(color = sex), size =1)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Por sexo

a + geom_density(aes(fill = sex), alpha = 0.4) 

Agregando lineas de la media por sexo

a + geom_density(aes(fill = sex), alpha = 0.4) + geom_vline(data = mu, aes(xintercept = grp.mean, color = sex), linetype = "dashed")+ scale_fill_grey()

Pirámide

Se usan por lo general para comparar las características de dos poblaciones. Este tipo de gráficos son utilizados en especial en el área de la demografía, por ejemplo, para mostrar la distribución de la población de un país.

# pop<-read.csv2("D:\\DriveW7\\2018\\Sabana\\Bioestadistica\\1. Razones, proporciones y tasas\\Datos 2015\\popcol2014.csv")
library(dplyr)
pop<-structure(list(Age = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
21L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L), .Label = c("0-4", "5-9", 
"10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", 
"45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79", 
"80-84", "85-89", "90-94", "95-99", "100+"), class = "factor"), 
    Gender = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), .Label = c("Female", "Male"), class = "factor"), 
    Population = c(-1964756, -1994267, -2039622, -2124688, -2118563, 
    -1954437, -1698865, -1541366, -1528204, -1493985, -1298866, 
    -1042778, -753272, -502244, -351391, -237603, -132520, -53749, 
    -13703, -1915, -133, 1867368, 1900316, 1952545, 2042760, 
    2056539, 1915532, 1690376, 1570921, 1575225, 1570866, 1397974, 
    1162510, 889438, 660438, 474314, 329386, 203163, 99368, 32400, 
    6247, 684)), row.names = c(NA, -42L), class = "data.frame")


# pop$Population[pop$Gender=="Male"]<--1*pop$Population[pop$Gender=="Male"]

n1 <- ggplot(pop, aes(x = Age, y = Population, fill = Gender)) + 
  geom_bar(subset = (pop$Gender == "Female"), stat = "identity") + 
  geom_bar(subset = (pop$Gender == "Male"), stat = "identity") + 
  scale_y_continuous(breaks = seq(-15000000, 15000000, 5000000), 
                     labels = paste0(as.character(c(seq(15, 0, -5), seq(5, 15, 5))), "m")) + 
  coord_flip() + 
  scale_fill_brewer(palette = "Set1") + 
  theme_bw()
## Warning: Ignoring unknown parameters: subset

## Warning: Ignoring unknown parameters: subset
n1

Lineas

Este tipo de gráficos se utiliza básicamente para representar el componente evolutivo de una serie de datos.

df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
                dose=rep(c("D0.5", "D1", "D2"),2),
                len=c(6.8, 15, 33, 4.2, 10, 29.5))

ggplot(df2, aes(x=dose, y=len, group=supp)) +
  geom_line(aes(linetype=supp))+
  geom_point(aes(shape=supp))

Torta

Cuando una totalidad está dividida en partes, este tipo de gráficos resulta de utilidad ya que permite representar la aportación de cada parte al total

#Add text annotations : The package scales is used to format the labels in percent
library(scales)
df <- data.frame(
  group = c("Male", "Female", "Child"),
  value = c(25, 25, 50)
  )
head(df)
##    group value
## 1   Male    25
## 2 Female    25
## 3  Child    50
bp<- ggplot(df, aes(x="", y=value, fill=group))+
geom_bar(width = 1, stat = "identity")
bp

pie <- bp + coord_polar("y", start=0)
pie + scale_fill_brewer("Blues") + 
  theme(axis.text.x=element_blank())+
  geom_text(aes(y = value/3 + c(0, cumsum(value)[-length(value)]), 
                label = percent(value/100)), size=5)

Dispersión y Burbujas

Cuando se tiene información para una misma observación de varias características o variables (máximo 3) este tipo de gráficos permiten representar visualmente las distintas observaciones, situándolas en el gráfico en función de los valores observados en las características o variables medidas. A través de este tipo de representación es posible observar la existencia de ciertas relaciones entre dichas características o variables de medida.

mtcars$cyl <- as.factor(mtcars$cyl)
mtcars$gear <- as.factor(mtcars$gear)
# Plot with multiple aestheics
p <- ggplot(data = mtcars, aes(x = mpg, y = wt, color = cyl, size = qsec, shape = gear)) + geom_point()
print(p)

Radial

Este gráfico, con aspecto de tela de araña, permite incrementar el número de ejes de los gráficos tradicionales a más de 2. En cada eje se representará una característica o serie y como resultado se obtendrá un área que representa los valores que toma una determinada observación para cada una de las características o series. Además, se pueden incorporar más de un área, lo que permite establecer comparaciones entre observaciones.

# install.packages("ggradar")
# library(ggplot2)
# # library(ggradar)
# suppressPackageStartupMessages(library(dplyr))
# library(scales)
# 
# mtcars %>%
#      add_rownames( var = "group" ) %>%
#      mutate_each(funs(rescale), -group) %>%
#      tail(4) %>% select(1:10) -> mtcars_radar
# 
# ggradar(mtcars_radar) 

Diagrama de cajas - Boxplot

Es un gráfico que está basado en cuartiles y mediante el cual se visualiza la distribución de un conjunto de datos. Está compuesto por un rectángulo (la «caja») y dos brazos (los «bigotes»).

Es un gráfico que suministra información sobre los valores mínimo y máximo, los cuartiles Q1, Q2 o mediana y Q3, y sobre la existencia de valores atípicos y la simetría de la distribución. Primero es necesario encontrar la mediana para luego encontrar los 2 cuartiles restantes

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
head(ToothGrowth)
##    len supp dose
## 1  4.2   VC  0.5
## 2 11.5   VC  0.5
## 3  7.3   VC  0.5
## 4  5.8   VC  0.5
## 5  6.4   VC  0.5
## 6 10.0   VC  0.5
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + 
  geom_boxplot()
p

ggplot(ToothGrowth, aes(x=dose, y=len)) + 
  geom_boxplot(notch=TRUE)

TREE MAP

Los treemap son perfectos para mostrar gran cantidad de datos de estructura jerárquica (estructura de árbol).

El espacio de la visualización está dividido en rectángulos a los que se les asigna un tamaño y un orden en función de una variable cuantitativa. Los niveles de la jerarquía del treemap se visualizan como rectángulos que contienen otros rectángulos. treemap 2014 region1 regimen1

Mapa Coropletico

Este tipo de mapa facilita la comparación de una medida estadística de una región con la de otra o muestra la variabilidad de esta para una región dada.