plot()
par()
"R is a language and environment for statistical computing and graphics."
Entre otras cosas R incluye:
Gráfica basada en codigo del libro R Graphics de Paul Murrell
library("graphics") library("grid") # http://lattice.r-forge.r-project.org/ library("lattice") # https://github.com/hadley/ggplot2 library("ggplot2")
plot()
para "diagramas de dispersión"barplot()
para gráficas de barrahist()
para histogramasboxplot()
(y bxp()
) para diagramas de cajas y bigotespie()
- mejor evitarlosplot()
set.seed(13579) y <- rnorm(30) types <- c("p", "l", "b", "c", "o", "h", "s", "S", "n") par(mfrow = c(3, 3), cex = 0.6, mar = c(3, 3, 3, 1)) for (type in types){ plot(y, type = type, main = paste0("type = ", type)) }
plot()
plot()
plot()
es una función genérica. Hay muchas formas de especificar los datos y dependiendo de lo que se le pase se genera uno u otro tipo de gráfico.
Veamos unos ejemplos usando el conjunto de datos iris
:
str(iris)
#> 'data.frame': 150 obs. of 5 variables: #> $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... #> $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... #> $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... #> $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... #> $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
plot()
plot(iris)
plot()
par(mfrow = c(1, 2), mar = c(5, 4, 2, 2)) plot(iris$Petal.Length, iris$Petal.Width) plot(Petal.Length ~ Species, data = iris)
plot()
- Métodosmethods("plot")
#> [1] plot.acf* plot.data.frame* plot.decomposed.ts* #> [4] plot.default plot.dendrogram* plot.density* #> [7] plot.ecdf plot.factor* plot.formula* #> [10] plot.function plot.hclust* plot.histogram* #> [13] plot.HoltWinters* plot.isoreg* plot.lm* #> [16] plot.medpolish* plot.mlm* plot.ppr* #> [19] plot.prcomp* plot.princomp* plot.profile.nls* #> [22] plot.raster* plot.spec* plot.stepfun #> [25] plot.stl* plot.table* plot.ts #> [28] plot.tskernel* plot.TukeyHSD* #> see '?methods' for accessing help and source code
barplot()
…… pero antes unos datos más interesantes
library("saber") # Ver github.com/nebulae-co/saber
data(SB11_20142) # glimpse(SB11_20142) estratos <- with(SB11_20142, table(PERS_GENERO, FINS_ESTRATOVIVIENDAENERGIA)) educacion_madre <- SB11_20142 %$% table(PERS_GENERO, FINS_NIVELEDUCATIVOMADRE)
barplot()
par(mfrow = c(2, 1), mar = c(3, 5.5, 1, 1), cex = 0.95) barplot(estratos, angle = c(45, 135), density = 20, col = "grey", names = colnames(estratos), xlab = "Estrato") legend("topright", title = "Género", rownames(estratos), cex = 1.5, angle = c(45, 135), density = 20, fill = "gray") barplot(educacion_madre, angle = c(45, 135), density = 20, col = colors()[c(50, 100)], horiz = TRUE, names = colnames(educacion_madre), ylab = "Nivel Educativo\n Madre")
barplot()
boxplot()
- bxp()
par(mfrow = c(1, 2), mar = c(4, 4, 4, 2), cex = 0.8) boxplot(MATEMATICAS_PUNT ~ FINS_ESTRATOVIVIENDAENERGIA, data = SB11_20142, col = "light grey") boxplot(MATEMATICAS_PUNT ~ FINS_ESTRATOVIVIENDAENERGIA, data = SB11_20142, pch = 1:6, boxwex = 0.5, boxfill = "lightblue", frame.plot = FALSE, main = "Distribución del puntaje\n de matemáticas por estrato", xlab = "Estrato", ylab = "Puntaje de matemáticas")
boxplot()
- bxp()
persp()
superficies.contour()
y filled.contour()
contornos.image()
cuadrícula con colores en \(z\).symbols()
diagramas de dispersión con símbolos de tamaño variable.fourfoldplot()
para tablas de contingencia \(2\times 2\times k\).mosaicplot()
stars()
para una visualización de varias variables cuantitativas.persp()
persp()
contour()
contour()
image()
symbols()
fourfoldplot()
mosaicplot()
stars()
stars()
matplot()
para gráficas de dispersión cruzando matrices.stripchart()
gráfica de dispersión en una sola dimensión.curve()
para gráficar funciones (como plot.function()
).Además de los métodos específicos para plot()
:
dotchart()
para resumir una variable cuantitativa cruzada con una o más variables categóricas.coplot()
gráficas condicionales (Trellis).sunflowerplot()
para diagramas de dispersión con datos superpuestos - alternativas para esto son image()
o hexbin::hexbin()
.assocplot()
visualización de una prueba de independencia para una tabla de contingencia bi-dimensional - vcd
extiende esto y ofrece más herramientas para datos categóricos.xlim
y ylim
en funciones de alto nivel o par("usr")
)Gráfica basada en código del libro R Graphics de Paul Murrell
par()
y algunos parámetros gráficosEl sistema base mantiene un estado que se consulta y modifica con par()
.
Podemos clasificar los parámetros de acuerdo a los componentes de las gráficas afectan y si son de alto nivel, bajo nivel o solo lectura.
par()
.par()
Parametro | Descripción | Nivel |
---|---|---|
bg |
Color del fondo | Bajo |
col |
Colores de simbolos y lineas | Alto |
fg |
Color del frente | Alto |
gamma |
Correción gamma de colores | Alto |
col
y fg
tienen sufijos .axis
, .lab
, .main
y .sub
Algunas funciones para trabajar con colores:
colors()
nombres de colorespallete()
la paleta numerica de coloresrgb()
, hsv()
, convertColor()
colorspace
espacios de coloresheat
terrain
topo
cm
.colors()
paletas de coloresrainbow()
gray()
mas paletas en RcolorBrewer
colorRamp()
y colorRampPallete()
crear paletasParametro | Descripción | Nivel |
---|---|---|
lend |
Forma de la terminación | Bajo |
ljoin |
Forma de la unión | Bajo |
lmitre |
Algo como enrredado | Bajo |
lty |
Tipo de linea | Alto |
lwd |
Grosor de la linea | Alto |
Parametro | Descripción | Nivel |
---|---|---|
adj |
Justificacion del texto | Alto |
ann |
"Anotar" el grafico? | Alto |
cex |
Tamaño del texto | Alto |
family |
Familia de la fuente | Bajo |
font |
Tipo de fuente (negrita, etc) | Alto |
las |
Rotación del texto en margenes | Alto |
lheight |
Espacio entre lineas | Bajo |
ps |
Tamaño de la fuente | Bajo |
srt |
Rotación del texto en el grafico | Alto |
tmag |
Tamaño del titulo del grafico | Bajo |
cex
y ps
tienen sufijos .axis
, .lab
, .main
y .sub
Parametro | Descripción | Nivel |
---|---|---|
pch |
Simbolo para datos | Alto |
type |
Tipo de gráfica | Alto |
bg
y cex
tambien pueden afectar los simbolos
Parametro | Descripción | Nivel |
---|---|---|
lab |
Numero de marcas | Alto |
mgp |
Posición de marcas y etiquetas | ALto |
tck |
Lonitud de las marcas | Alto |
tcl |
Lonitud de las marcas | Alto |
[x|y]axp |
Numero de marcas | Alto |
[x|y]axs |
Rango del eje | Alto |
[x|y]axt |
Estilo del eje | Alto |
[x|y]log |
Escala logaritmica? | Bajo |
Tambien es relevante [x|y]lim
que pasa desde las funciones de alto nivel.
Parametro | Descripción | Nivel |
---|---|---|
oma |
Margenes externas (lineas) | Bajo |
omi |
Margenes externas (inch) | Bajo |
omd |
Margenes externas (porporciones) | Bajo |
fig |
Ubicación de la figura (vertices) | Bajo |
fin |
Ubicación de la figura (centro) | Bajo |
mar |
Margenes de la figura (lineas) | Bajo |
mai |
Margenes de la figura (inch) | Bajo |
mex |
Tamaño de linea en margenes | Bajo |
plt |
Ubicación del gráfico (proporciones) | Bajo |
Parametro | Descripción | Nivel |
---|---|---|
pin |
Ubicación del gráfico (centro) | Bajo |
pty |
Ubicación del gráfico ("m", "s") | Bajo |
xpd |
Clipping | Alto |
cin |
Tamaño de un caracter (inch) | Lectura |
usr |
Rango de los Ejes | Bajo |
din |
Tamaño del dispositivo grafico (inch) | Lectura |
cra |
Tamaño de un caracter ("pixels") | Lectura |
cxy |
Tamaño de un caracter ("usr") | Lectura |
Tambien es relevante [x|y]lim
que pasa desde las funciones de alto nivel.
Parametro | Descripción | Nivel |
---|---|---|
ask |
Preguntar por nueva pagina? | Bajo |
new |
Empezo una gráfica nueva? | Bajo |
mfg |
Que figura (fila, col) se usa | Bajo |
mfrow |
Varias en una la pagina (por fila) | Bajo |
mfcol |
Varias en una la pagina (por col) | Bajo |
Algunas funciones reciben al argumento add
Tambien esta la función layout()
y split.screen()
.
nf <- layout(mat = matrix(c(2, 0, 1, 3), 2, 2, byrow = TRUE), widths = c(3, 1), heights = c(1, 3), respect = TRUE) layout.show(nf)
Función | Descripción |
---|---|
lines() y matlines() |
Líneas |
points() y matpoints() |
Puntos |
rect() |
Rectángulos |
poly() |
Polígonos |
segments() |
Segmentos |
text() |
Texto |
Función | Descripción |
---|---|
grid() |
Cuadrículas |
abline() |
Rectas |
arrows() |
Flechas |
box() |
Borde |
rug() |
"Rug" en ejes |
mtext() |
Texto en las márgenes |
title() |
Títulos y etiquetas de ejes |
legend() |
Leyenda |
Función | Descripción |
---|---|
axis() y axTicks() |
Ejes |
strheight() |
Tamaños de caracteres |
strwidth() |
Tamaños de caracteres |
xinch() |
Transformaciones a coordenadas |
yinch() |
Transformaciones a coordenadas |
xyinch() |
Transformaciones a coordenadas |
cm() |
Transformaciones a coordenadas |
plot.newclass <- function(x, y = NULL, main = "", sub = "", xlim = NULL, ylim = NULL, axes = TRUE, ann = par("ann"), col = par("col"), ...){ xy <- xy.coords(x, y) if (is.null(xlim)) xlim <- range(xy$x[is.finite(xy$x)]) if (is.null(ylim)) ylim <- range(xy$y[is.finite(xy$y)]) opar <- par(no.readonly = TRUE) on.exit(par(opar)) plot.new() plot.window(xlim, ylim, ...) points(xy$x, xy$y, col = col, ...) if (axes) { axis(1) axis(2) box() } if (ann) title(main = main, sub = sub, xlab = xy$xlab, ylab = xy$ylab, ...) }
png_meme_generator <- function(x, main, sub){ con <- url(x, open = 'rb') rawpng <- readBin(con, what = 'raw', n = 50000) close(con) img <- png::readPNG(rawpng) old_par <- par(no.readonly = TRUE) on.exit(par(old_par)) par(xpd = NA, mgp = c(0, 0, 0), oma = c(0, 0, 0, 0), ann = F) plot.new() plot.window(0:1, 0:1) usr <- par("usr") rasterImage(img, usr[1], usr[3], usr[2], usr[4]) text(.5, 1.05, main, cex = 2, col = "#000000", pos = 3) text(.5, -.05, sub, cex = 2, col = "#000000", pos = 1) }
png_meme_generator( "http://i2.kym-cdn.com/photos/images/original/000/208/140/1322357772581.png", "Tu cara cuando ves", "un meme hecho en R")
Grid es un sistema gráfico alternativo, flexible y poderoso.
Tres componentes:
?units
?gpar
grob
s.Grid solo ofrece componentes de bajo nivel.
Region rectangular que proporciona un contexto para dibujar.
Contexto para dibujar: - Contexto geometrico: sistema coordenado - Contexto gráfico: parametros gráficos
v <- viewport(x = 0.6, y = 0.6, w = unit(1, "inches"), h = unit(1, "inches")) grid.show.viewport(v)
Laticce es una libreria que proporciona funciones gráficas de alto nivel basadas en grid
y útiles para generar gráficas para datos multivariados a través de condicionamiento (Trellis plots) basado en trabajo e ideas de William Cleveland.
grid
y por lo tanto hereda gran parte de sus características.La visualización con Trellis se define por el tipo de gráfica y los roles de las variables, los más comunes son:
Variables de agrupamiento
lattice
utiliza una interfaz de fórmula: - ~ x | A
: graficar la variable x
para cada nivel de A
. - y ~ x | A * B
graficar la relación entre las variables numéricas y
y x
para cada combinación de niveles de los "factores" A
y B
.
Gráfica | Descripción | Ejemplo de fórmula |
---|---|---|
histogram() | Histograma | ~ x |
densityplot() | Gráfica de "densidad kernel" | ~ x | A * B |
qqmath() | Gráfica de cuantiles teóricos | |
qq() | Gráfica de cuantiles para dos muestras | |
stripplot() | Stripchart | A ~ x ó x ~ A |
bwplot() | Box-Plots comparativos | x ~ A ó A ~ x |
dotplot() | Gráfica de puntos (de Cleveland) | ~ x | A |
barchart() | Gráfica de barras | x ~ A ó A ~ x |
Gráfica | Descripción | Ejemplo de fórmula |
---|---|---|
xyplot() | Diagrama de dispersión | y ~ x | A |
splom() | Matriz de diagramas de dispersión | data.frame |
contourplot() | Gráfica de contornos para superficies | z ~ x * y |
levelplot() | False color level plot of surfaces | z ~ y * x |
wireframe() | Gráfica de perspectiva 3D | z ~ y * x |
cloud() | Diagrama de dispersión 3D | z ~ x * y | A |
parallelplot() | Gráfica de coordenadas paralelas | data.frame |
histogram(~ MATEMATICAS_PUNT, data = SB11_20142, xlab = "Puntaje Matemáticas", ylab = "Frecuencia relativa")
histogram(~ MATEMATICAS_PUNT | factor(FINS_ESTRATOVIVIENDAENERGIA), data = SB11_20142, xlab = "Puntaje Matemáticas", ylab = "Frecuencia relativa")
densityplot(~ MATEMATICAS_PUNT | factor(FINS_ESTRATOVIVIENDAENERGIA), data = SB11_20142, groups = PERS_GENERO, plot.points = FALSE, auto.key = TRUE, xlab = "Puntaje Matemáticas", ylab = "Densidad")
xyplot(LECTURA_CRITICA_PUNT ~ MATEMATICAS_PUNT | factor(FINS_ESTRATOVIVIENDAENERGIA) * factor(PERS_GENERO), data = SB11_20142, xlab = "Puntaje Matemáticas", ylab = "Puntaje Lectura Crítica")
readr
, readxl
y haven
lectura de archivos.lubridate
manejo de fechas y tiempo.stringr
interface a stringi
para manejo de caracteres.dplyr
y tidyr
manipulación y limpieza de datos.ggplot2
una gramática de gráficas - util para abstraer y construir visualizaciones.ggplot(...) + layer(...) + layer(...) + helper(...) + helper(...) + theme(...)
ggplot(mtcars) + aes(y = mpg, x = factor(cyl)) + geom_violin()
shiny
.plotly aprovecha la libreria de JavaScript plot.ly e inclusive traduce directamente objetos de ggplot2 - aprovecha htmlwidgets
para su integración.
rbokeh una interfaz a la libreria de Python bokeh que tambien usa JavaScript para presentar graficos interactivos en navegadores modernos. Igual que plotly
aprovecha htmlwidgets
para integrarse.
La vista de tareas con la que empezamos: Vista de Tareas/Gráficas.
Canales: en twitter #rstats y en StackOverflow el tag R. También pueden googlea-R R + "pregunta".
Algunas buenas referencias:
Esta presentación fue escrita en RMarkdown desde RStudio y compilada por rmarkdown
en la plantilla ioslides
de Google gracias a knitr
y pandoc
. Publicada en la web en GitHub gracias a GitHub Pages.
La presentación fue preparada por por Adriana Clavijo, Julian Cruz y Daniel Moreno para el Grupo de Usuarios de R de Bogotá y el contenido original esta bajo la licensia CC-BY 4.0.