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 es una implementación de las ideas recogidas en el artículo de The Language of Graphics escrito por Leland Wilkinson y sus coautores en 2000.
De la misma manera que el lenguaje natural organiza sonidos mediante ciertas reglas comunes, conocidas y regulares para generar mensajes con significado, es posible construir una serie de reglas comunes, conocidas y regulares para crear representaciones visuales de datos. <*https://www.datanalytics.com/libro_r/introduccion-a-ggplot2.html>
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
Siempre se inicia con ggplot(), incluyendo dataset y aesthetics (opcional)
Condición:
Aesthetic mapping
Ejemplos: - position (i.e., en el eje “x” y “y”) - color (color “exterior”) - fill (color “interior”) - shape (de los puntos) - linetype - size
# 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()
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"))
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.
a + geom_density()
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`.
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)
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`.
a + geom_density(aes(fill = sex), alpha = 0.4)
a + geom_density(aes(fill = sex), alpha = 0.4) + geom_vline(data = mu, aes(xintercept = grp.mean, color = sex), linetype = "dashed")+ scale_fill_grey()
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
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))
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)
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)
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)
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)
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.
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.