R Language
ggplot2
Buscar..
Observaciones
ggplot2
tiene su propio sitio web de referencia perfecto http://ggplot2.tidyverse.org/ .
La mayoría de las veces, es más conveniente adaptar la estructura o el contenido de los datos trazados (por ejemplo, un data.frame
) que ajustar las cosas dentro de la trama después.
RStudio publica una hoja de trucos muy útil "Visualización de datos con ggplot2" que se puede encontrar aquí .
Gráfico de dispersión
Trazamos un diagrama de dispersión simple utilizando el conjunto de datos de iris integrado de la siguiente manera:
library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) +
geom_point()
Visualización de múltiples parcelas
Muestra múltiples gráficos en una imagen con las diferentes funciones de facet
. Una ventaja de este método es que todos los ejes comparten la misma escala en los gráficos, lo que facilita su comparación de un vistazo. Usaremos el conjunto de datos mpg
incluido en ggplot2
.
Ajustar los gráficos línea por línea (intenta crear un diseño cuadrado):
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~class)
Mostrar varios gráficos en una fila, varias columnas:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(.~class)
Mostrar varios gráficos en una columna, varias filas:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(class~.)
Muestra múltiples gráficos en una cuadrícula por 2 variables:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(trans~class) #"row" parameter, then "column" parameter
Prepare sus datos para el trazado
ggplot2
funciona mejor con un marco de datos largo. Los siguientes datos de muestra que representan los precios de los dulces en 20 días diferentes, en un formato descrito como amplio, porque cada categoría tiene una columna.
set.seed(47)
sweetsWide <- data.frame(date = 1:20,
chocolate = runif(20, min = 2, max = 4),
iceCream = runif(20, min = 0.5, max = 1),
candy = runif(20, min = 1, max = 3))
head(sweetsWide)
## date chocolate iceCream candy
## 1 1 3.953924 0.5890727 1.117311
## 2 2 2.747832 0.7783982 1.740851
## 3 3 3.523004 0.7578975 2.196754
## 4 4 3.644983 0.5667152 2.875028
## 5 5 3.147089 0.8446417 1.733543
## 6 6 3.382825 0.6900125 1.405674
Para convertir sweetsWide
a formato largo para usar con ggplot2
, se ggplot2
usar varias funciones útiles de base R y los paquetes reshape2
, data.table
y tidyr
(en orden cronológico):
# reshape from base R
sweetsLong <- reshape(sweetsWide, idvar = 'date', direction = 'long',
varying = list(2:4), new.row.names = NULL, times = names(sweetsWide)[-1])
# melt from 'reshape2'
library(reshape2)
sweetsLong <- melt(sweetsWide, id.vars = 'date')
# melt from 'data.table'
# which is an optimized & extended version of 'melt' from 'reshape2'
library(data.table)
sweetsLong <- melt(setDT(sweetsWide), id.vars = 'date')
# gather from 'tidyr'
library(tidyr)
sweetsLong <- gather(sweetsWide, sweet, price, chocolate:candy)
Los todos dan un resultado similar:
head(sweetsLong)
## date sweet price
## 1 1 chocolate 3.953924
## 2 2 chocolate 2.747832
## 3 3 chocolate 3.523004
## 4 4 chocolate 3.644983
## 5 5 chocolate 3.147089
## 6 6 chocolate 3.382825
Consulte también Reforma de datos entre formularios largos y anchos para obtener detalles sobre la conversión de datos entre formatos largos y anchos .
El resultado sweetsLong
tiene una columna de precios y una columna que describe el tipo de dulce. Ahora trazar es mucho más simple:
library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()
Añadir líneas horizontales y verticales para trazar
Agregue una línea horizontal común para todas las variables categóricas
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_hline(aes(yintercept=5), colour="#990000", linetype="dashed")
Agrega una línea horizontal para cada variable categórica
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
# add horizontal levels for drawing lines
df$hval <- df$y + 2
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), colour="#990000", width=0.75)
Añadir línea horizontal sobre barras agrupadas
# sample data
df <- data.frame(x = rep(c('A', 'B'), times=2),
group = rep(c('G1', 'G2'), each=2),
y = c(3, 4, 5, 6),
hval = c(5, 6, 7, 8))
p1 <- ggplot(df, aes(x=x, y=y, fill=group))
+ geom_bar(position="dodge", stat="identity")
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval),
colour="#990000",
position = "dodge",
linetype = "dashed")
Añadir linea vertical
# sample data
df <- data.frame(group=rep(c('A', 'B'), each=20),
x = rnorm(40, 5, 2),
y = rnorm(40, 10, 2))
p1 <- ggplot(df, aes(x=x, y=y, colour=group)) + geom_point()
p1 + geom_vline(aes(xintercept=5), color="#990000", linetype="dashed")
Gráfico de barras verticales y horizontales
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
es posible obtener un gráfico de barras horizontal simplemente agregando la estética coord_flip () al objeto ggplot:
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")+
coord_flip()
Argumento de violín
Las gráficas de violín son estimaciones de densidad del núcleo reflejadas en el plano vertical. Se pueden usar para visualizar varias distribuciones una al lado de la otra, y el reflejo ayuda a resaltar cualquier diferencia.
ggplot(diamonds, aes(cut, price)) +
geom_violin()
Las tramas de violín se nombran por su parecido con el instrumento musical, esto es particularmente visible cuando se combinan con una gráfica de caja superpuesta. Esta visualización luego describe las distribuciones subyacentes tanto en términos del resumen de 5 números de Tukey (como diagramas de caja) como en las estimaciones de densidad continua completa (violines).
ggplot(diamonds, aes(cut, price)) +
geom_violin() +
geom_boxplot(width = .1, fill = "black", outlier.shape = NA) +
stat_summary(fun.y = "median", geom = "point", col = "white")
Producir parcelas básicas con qplot.
qplot pretende ser similar a la función base r plot()
, intentando siempre trazar sus datos sin requerir demasiadas especificaciones.
qplot básico
qplot(x = disp, y = mpg, data = mtcars)
añadiendo colores
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
añadiendo un suave
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)