Curso

R te permite crear distintos tipos de gráficos, desde los básicos como densidades, diagramas de puntos, boxplots y gráficos de dispersión, hasta otros más complejos desde el punto de vista estadístico, como los gráficos de probabilidad.
Además, puedes pasar de producir gráficos básicos con poca personalización a crear gráficos avanzados con personalización total y elementos interactivos. Aun así, no siempre obtenemos el resultado que queremos: Stack Overflow está lleno de preguntas sobre gráficos en R, muchas de ellas recurrentes.
Por eso en DataCamp hemos reunido en un solo post las preguntas más frecuentes y sus respuestas mejor valoradas.
Para practicar la creación de gráficos en R, prueba este curso de visualización de datos en R.
Las 15 preguntas sobre gráficos en R
1. Cómo dibujar un gráfico vacío en R
Abrir un nuevo marco de gráfico
Puedes abrir un marco de gráfico vacío y activar el dispositivo gráfico en R así:Nota: las funciones plot.new() y frame() definen un nuevo marco de gráfico sin ejes, etiquetas ni bordes. Indican que va a dibujarse un gráfico nuevo: se abrirá una ventana gráfica si no hay ninguna abierta, o se preparará la existente para el nuevo gráfico. Puedes leer más sobre estas funciones aquí.
Configurar las dimensiones de la ventana gráfica
También puedes usar la función plot.window() para definir las dimensiones horizontales y verticales del gráfico vacío que acabas de crear:
plot.new()
pWidth = 3
pHeight = 2
plot.window(c(0,pWidth),
c(0,pHeight))
Dibujar un gráfico realmente vacío
Puedes dibujar un gráfico vacío con la función plot(). Además, rellénalo con ejes, etiquetas y un título con las funciones mtext() y title().
Das las coordenadas (5,5) para el gráfico, pero no dibujas nada porque estableces el argumento type como "n".
Truco: prueba a ponerlo en "p" o "b" y mira qué ocurre.
Además, no anotas el gráfico, pero sí fijas los límites de 0 a 10 en los ejes x e y.
Por último, puedes dibujar un marco alrededor con la función box() y añadir puntos con points():
Nota: puedes pasar coordenadas x e y en vectores para trazar varios puntos a la vez. El argumento pch te permite elegir el símbolo, mientras que cex controla cuánto se escalan respecto al valor por defecto los textos y símbolos trazados.
Truco: si quieres ver qué número corresponde a cada símbolo, haz clic aquí.
2. Cómo establecer las etiquetas de los ejes y el título de los gráficos en R
Los ejes de los gráficos en R son uno de los temas más populares en las preguntas de Stack Overflow; y las dudas son de lo más variado.
Sigue leyendo para descubrir qué preguntas son las más habituales según DataCamp.
¿Cómo nombrar los ejes (con superíndices o subíndices) y poner un título?
Puedes nombrar fácilmente los ejes y añadir un título para que tu gráfico sea más específico y fácil de entender para tu audiencia.
Basta con añadir los argumentos main para el título principal, sub para el subtítulo, xlab para la etiqueta del eje x y ylab para la del eje y.
Nota: si quieres un título con superíndices o subíndices, añádelos en el argumento main de plot(). Usa expression() y el símbolo ^ para superíndices o corchetes para subíndices.
Pruébalo en el bloque de DataCamp Light de abajo:
También puedes incluir letras griegas en las etiquetas de los ejes combinando expression() y paste(). Ejecuta este código:
Ajustar la apariencia de las etiquetas de los ejes
Para ajustar la apariencia de las etiquetas de los ejes x e y, usa los argumentoscol.lab y cex.lab. El primero cambia el color de las etiquetas y el segundo su tamaño relativo al ajuste por defecto de cex.
Para más información sobre estos argumentos, visita esta página.
Quitar las etiquetas y anotaciones de los ejes
Si quieres ocultar los valores de los ejes, añade los argumentos xaxt y yaxt con el valor "n". Estos argumentos especifican el tipo de eje. Con "n" suprimes el trazado del eje.
Si pasas cualquier otro carácter a xaxt y yaxt, los ejes x e y se dibujarán.
ann con valor FALSE para eliminar las etiquetas de los ejes.
Truco: ¿no es esto lo que buscabas? Ve a esta página.
Rotar las etiquetas de los ejes
Puedes añadir el argumentolas a la función axis() para rotar los números de cada eje:
Nota: para hacer esto, primero debes indicar en plot() que aún no se dibujen ejes: esa tarea la realizarán después las dos llamadas a axis().
El argumento las puede tomar cuatro valores. Según elijas, cambiará la orientación: con 0 (por defecto) la etiqueta queda paralela al eje; con 1, horizontal; con 2, perpendicular, y con 3, vertical.
Y hay más. Si quieres conocer todas las posibilidades de axis(), sigue leyendo.
Mover las etiquetas de los ejes
¿Quieres cambiar la posición de las etiquetas de los ejes?
Sin problema: con axis() puedes especificar dónde dibujar cada eje. Por ejemplo, dibujar el eje x arriba del área del gráfico y el eje y a la derecha.
Recuerda: si pasas 1 o 2 a axis(), el eje se dibuja abajo o a la izquierda. Desplázate un poco arriba para ver un ejemplo en el bloque anterior.
3 y 4 a axis():
Como ves, primero representas x e y sin ejes ni anotaciones. Luego añades los ejes que quieres y especificas su ubicación respecto al gráfico.
La flexibilidad que te da axis() no se queda ahí. Mira la siguiente pregunta frecuente para ver qué más puedes resolver con esta función básica de R.
Truco: ve a la última pregunta para ver más sobre cómo mover el texto de las etiquetas de los ejes con hjust y vjust.
3. Cómo añadir y cambiar el espaciado de las marcas de los ejes
Cómo cambiar el espaciado de las marcas de los ejes
Dejar que R decida las marcas del eje puede ser frustrante y en algún momento querrás ajustarlas.
1. Usar la función axis() para definir las marcas
Primero defines la posición de las marcas y sus etiquetas. Luego dibujas el gráfico especificando el tipo de eje x como "n", suprimiendo su trazado.
Después empieza lo interesante:
- La función
axis()permite especificar el lado del gráfico donde dibujar el eje. Con1se dibuja abajo; con2, a la izquierda; con3o4, arriba o a la derecha, respectivamente. - El argumento
atindica los puntos donde trazar las marcas. Aquí usas las posiciones definidas enV1. - Igualmente, las
labelsson las definidas enV2. - Ajustas la dirección de las marcas con
tck: con un valor negativo, las marcas aparecen por debajo del eje.
Truco: pasa un valor positivo a tck y mira qué ocurre.
tcl y la apariencia de sus etiquetas con cex.axis, col.axis y font.axis.
2. Usar otras funciones para definir las marcas
También puedes usar par() y plot() para definir la posición de las marcas y el número de intervalos entre ellas.
xaxp pasas la posición de las marcas en los extremos del eje x, seguida del número de intervalos entre marcas:
También puedes ejecutar este código para lograr prácticamente lo mismo:
Nota: esto solo funciona si no usas escala logarítmica. Si los ejes están en logaritmos (par(xlog=T)), los tres valores de xaxp significan otra cosa: para rangos pequeños, n es negativo. En caso contrario, n está en 1:3 e indica un caso; x1 y x2 son las potencias de 10 más baja y más alta dentro de las coordenadas del usuario, 10 ^ par(“usr”)[1:2].
En este ejemplo usas par(): estableces xlog a TRUE y añades xaxp con las coordenadas de las marcas extremas y el número de intervalos. Aquí el mínimo es 1, el máximo 4 y hay 3 intervalos entre marcas.
Luego representas x e y, añadiendo el argumento log para indicar si quieres el eje x, el y o ambos en escala logarítmica. Puedes pasar "x", "y" o "xy".
Cómo añadir marcas menores
Puedes añadir marcas menores rápidamente con la funciónminor.tick() del paquete Hmisc:
- El argumento
nxdefine en cuántos intervalos dividir el espacio entre marcas principales del eje. Si pasas1, se suprimen las marcas menores. nyhace lo mismo para el eje y.tick.ratioindica la proporción entre la longitud de las marcas menores y las mayores. La longitud de estas últimas se obtiene depar(tck=x).
4. Cómo crear dos ejes X o Y diferentes
La primera opción es crear un primer gráfico y ejecutarpar() con el argumento new a TRUE para evitar que R limpie el dispositivo gráfico:
Después creas el segundo gráfico con plot(). Pasa los datos y ajusta argumentos como type, axes, bty, xlab y ylab:
type: pasalpara trazar líneas;axesaFALSEpara no dibujar ejes;btysuprime la caja alrededor del gráfico;xlabvacío para que no haya etiqueta en el eje x, yylabtambién vacío para no etiquetar el eje y.
Compruébalo en este bloque de DataCamp Light. El código anterior ya está cargado en tu entorno. Puedes verificarlo en la consola de R a la derecha del bloque:
Ahora toca añadir un eje y escribir texto en los márgenes con axis() y mtext() respectivamente.
Puedes añadir un eje nuevo a la derecha pasando el argumento side con valor 4 a axis(). Después, especifica at con los puntos donde dibujar marcas. En este caso, calculas una secuencia de n+1 valores «redondos» igualmente espaciados que cubren el rango de z con pretty(). Así replicas los números del eje y del segundo gráfico, que llamaste z.
Prueba todo esto abajo:
Nota: el argumento side puede valer 1 (abajo), 2 (izquierda), 3 (arriba) o 4 (derecha). El argumento line indica en qué línea del margen empieza el texto.
El resultado final de tu código será así:
set.seed(101)
x <- 1:10
y <- rnorm(10)
z <- runif(10, min=1000, max=10000)
plot(x, y)
par(new = TRUE)
plot(x,
z,
type = "l",
axes = FALSE,
bty = "n",
xlab = "",
ylab = "")
axis(side=4,
at = pretty(range(z)))
mtext("z",
side=4,
line=3)
Como ejercicio adicional, intenta construir un gráfico con dos ejes x distintos. Hazlo en este bloque de DataCamp Light:
Ten en cuenta que, aunque puedes hacerlo todo a mano con las funciones básicas plot(), axis() y mtext(), hay paquetes que automatizan el proceso: twoord.plot() del paquete plotrix y doubleYScale() del paquete latticeExtra son muy prácticos y quizá más rápidos para este fin:
Nota: el ejemplo anterior usa este conjunto de datos. Si tienes dudas sobre cómo importarlo o sobre read.table(), revisa el tutorial de DataCamp sobre importación de datos en R.
5. Cómo añadir o cambiar la leyenda de un gráfico en R
Añadir y cambiar la leyenda con R base
Puedes añadir una leyenda fácilmente con la funciónlegend():
Ojo: los argumentos pt.cex y title.cex que aparecen en la documentación de legend() no funcionan como cabría esperar. Hay algunos apaños:
- Poner el título o las etiquetas de la leyenda en otra fuente añadiendo
text.fontalegend():
- Dibujar la leyenda dos veces con valores distintos de
cex
Truco: si te interesan los colores disponibles en R, echa un vistazo a este PDF.
Cómo añadir y cambiar la leyenda y etiquetas en ggplot2
Añadir una leyenda en ggplot2 es bastante sencillo. Basta con ejecutar lo siguiente:
Y obtienes una leyenda por defecto. Pero normalmente querrás ajustar su apariencia.
Hay dos formas de cambiar el título y las etiquetas de la leyenda en ggplot2:
- Indicar a la escala que use otro título y etiquetas
colour o shape, debes cambiar nombres y etiquetas mediante scale_color_discrete() y scale_shape_discrete() respectivamente:
Puede que el gráfico se vea algo «apretado» en la pestaña Plot del bloque, pero en RStudio no tendrás ese problema.
Puedes crear dos leyendas si añades el argumento shape en geom_point() y en los argumentos labels.
Si quieres mover la leyenda a la parte inferior, establece legend.position como "bottom". Por su parte, legend.justification te permite situarla dentro del gráfico.
Truco: consulta aquí los distintos tipos de escalas para cambiar nombres y etiquetas.
- Cambiar el data frame para que el factor tenga la forma deseada
Luego puedes usar los nuevos nombres de factor para construir tu gráfico en ggplot2, evitando tener que cambiar nombres y etiquetas con líneas extra de código.
Truco: para una cheat sheet completa de ggplot2, ve aquí.
6. Cómo dibujar una cuadrícula en tu gráfico de R
Dibujar una cuadrícula con R base
Para ciertos fines quizá quieras incluir una cuadrícula. Puedes añadirla fácilmente con la funcióngrid():
Dibujar una cuadrícula con ggplot2
El bloque siguiente muestra cómo asegurarte de que tu gráfico tenga cuadrícula con ggplot2. Los datos de chol ya están cargados y con las transformaciones de antes aplicadas.
Si no tienes claro cómo son los datos, imprime las primeras filas en la consola de R del bloque:
Truco: si no quieres las líneas menores de la cuadrícula, pasa element_blank() a panel.grid.minor.
Si quieres rellenar el fondo con un color, añade panel.background = element_rect(fill = "navy") a tu código. Puedes verlo en el bloque de abajo. Los datos chol están cargados y ligeramente transformados, igual que antes. ¡Pruébalo!
7. Cómo dibujar un gráfico con un PNG como fondo
Puedes dibujar un gráfico con una imagen .png como fondo fácilmente con el paquete png. Instálalo si lo necesitas, actívalo con library() y empieza a trazar.
Primero, carga la imagen. Usa readPNG() indicando la ruta del archivo.
Truco: puedes comprobar y cambiar tu directorio de trabajo ejecutando estos comandos.
Si la imagen está guardada en tu directorio de trabajo, basta con readPNG("picture.png") en lugar de pasar la ruta completa.
Después, configura el área del gráfico y llama a par() para establecer los parámetros gráficos de rasterImage(). Usa el argumento usr para definir los extremos de las coordenadas de usuario de la región de trazado. En este caso, 1, 3, 2 y 4.
Luego dibuja una cuadrícula y añade algunas líneas:
install.packages("png")
library(png)
image <- readPNG("<path to your picture>")
getwd()
setwd("<path to a folder>")
plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y")
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
grid()
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")
Esto puede darte el siguiente resultado si usas el logo de DataCamp:
library(png)
image <- readPNG("datacamp.png")
plot(1:2, type="n", main="Plotting Over an Image", xlab="x", ylab="y", asp=1)
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1.5, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")

Ten en cuenta que readPNG() requiere un archivo .png y que puedes seguir el mismo procedimiento con imágenes jpg: en ese caso, carga la librería jpeg.
En este ejemplo primero descargas una imagen de la web para usarla en tu gráfico, pero también puedes guardarla localmente y pasar la ruta a readJPEG().
Este ejemplo procede de la R Graph Gallery, que ofrece mucha inspiración para visualización en R, con código y resultados juntos. Ideal para inspirarte o encontrar rápido el código que necesitas.
8. Cómo ajustar el tamaño de los puntos en un gráfico de R
Ajustar el tamaño de los puntos con R base
Para ajustar el tamaño de los puntos con R base, basta con usar el argumentocex:
symbols():
En este gráfico, los círculos toman los valores de df$x3 como radios, mientras que el argumento inches controla su tamaño. Si recibe un número positivo, los símbolos se escalan de forma que su dimensión mayor mida ese valor en pulgadas.
Ajustar el tamaño de los puntos con ggplot2
En este caso, quieres ajustar el tamaño de los puntos en tu diagrama de dispersión. Puedes hacerlo con el argumento size. Los datos de chol están cargados para ti:
También puedes pasar size a geom_point():
ggplot(chol,
aes(x=chol$WEIGHT, y=chol$HEIGHT)) +
geom_point(size = 2)
Obtendrás el mismo resultado. ¡Pruébalo sustituyendo el último bloque del ejemplo de arriba!
9. Cómo ajustar una curva suave a tus datos en R
La función loess() es quizá la solución favorita en R para esta tarea. «Ajusta una superficie polinómica determinada por uno o más predictores numéricos, usando ajuste local».
En resumen: con tus datos, usas loess() correlacionando y con x. Así defines la respuesta numérica y de uno a cuatro predictores numéricos.
x e y y trazas las líneas con los valores predichos por lo:
10. Cómo añadir barras de error en un gráfico de R
Dibujar barras de error con R base
La mala noticia: R no dibuja barras de error «de serie». La buena: puedes hacerlo sin instalar paquetes extra.
Primero, define esta función para calcular estadísticas descriptivas de tu data frame:
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE) {
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE) {
if (na.rm) sum(!is.na(x))
else length(x)
}
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col) {
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
},
measurevar
)
# Rename the "mean" column
datac <- rename(datac, c("mean" = measurevar))
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- qt(conf.interval/2 + .5, datac$N-1)
datac$ci <- datac$se * ciMult
return(datac)
}
La función está tomada de esta fuente y también está disponible en la librería Rmisc.
Ahora puedes usarla para calcular estadísticas del conjunto chol, ya cargado. Con esos resultados, crea tu gráfico.
Asegúrate de inspeccionar los datos antes de empezar:
Si quieres consultar todos los argumentos de arrows(), visita esta página.
Dibujar barras de error con ggplot2
Barras de error con error estándar de la media
Primero, resume tus datos con la función summarySE() de Rmisc o usa la función definida más arriba. Luego usa el data frame resultante para trazar variables y sus barras de error, por ejemplo, el error estándar de la media.
position_dodge():
Truco: si aparece el error «geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?», normalmente debes ajustar la estética de grupo.
Barras de error con intervalos de confianza
Partiendo del resumen que hiciste con summarySE(), también puedes trazar barras de error que representen intervalos de confianza. En este caso, de confianza al 95%.
Observa cómo ahora el color de las barras de error se fija a negro con el argumento colour.
Barras de error con desviación estándar
Por último, también puedes usar los resultados de summarySE() (paquete Rmisc) o de la función copiada arriba para trazar barras de error que representen la desviación estándar.
Concretamente, solo tendrías que ajustar los argumentos ymin y ymax que pasas a geom_errorbar():
Big tip*: también echa un vistazo a esto para ver ejemplos detallados sobre cómo trazar medias y barras de error.
11. Cómo guardar un gráfico como imagen en disco
Puedes usar dev.copy() para copiar tu gráfico, creado en el dispositivo actual, al dispositivo o carpeta que especifiques.
x <- seq(0,2*pi,0.1)
y <- sin(x)
plot(x,y)
dev.copy(jpeg,
filename="<path to your file/name.jpg>");
dev.off();
(x)
(y)
12. Cómo colocar dos gráficos de R uno al lado del otro
Colocar dos gráficos lado a lado con R base
Puedes hacerlo con comandos básicos de R:Añadiendo la función par() con el argumento mfrow, especificas un vector (aquí 1 y 2): todas las figuras se dibujarán en una matriz de 1 fila y 2 columnas por filas (mfrow).
En otras palabras, los boxplots se imprimirán en una fila dentro de dos columnas.
Colocar dos gráficos lado a lado con ggplot2
Si quieres poner gráficos lado a lado y no quieres especificar límites, considera usar el paquete ggplot2.
Tus datos chol y la función summarySE() ya están cargados. Inspecciónalos en la consola de R si no estás seguro de cómo son:
Nota cómo añades la función facet_grid() para indicar que quieres dos gráficos lado a lado. El elemento usado para determinar cómo se dibujan es MORT, como puedes ver arriba.
Colocar más gráficos lado a lado con gridExtra
Para imprimir gráficos lado a lado, puedes usar el paquete gridExtra; asegúrate de tenerlo instalado y activado, y ejecuta algo así:
Nota cómo aquí también determinas cómo aparecerán los dos gráficos gracias al argumento ncol.
Colocar más gráficos lado a lado con lattice
Al igual que con ggplot2, el paquete lattice no requiere especificar límites ni la forma de imprimir los gráficos lado a lado.
En su lugar, usas bwplot() para hacer gráficos de enrejado (trellis) con el tipo de gráfico de boxplot. Los gráficos trellis muestran una variable o la relación entre variables, condicionados a una o más variables.
En este caso, si usas el conjunto de datos chol (que puedes encontrar aquí o cargar con read.table()), muestras la variable CHOL por separado para cada combinación de niveles de los factores SMOKE y MORT.
¡Ten en cuenta que los datos ya están cargados en el bloque de DataCamp Light de abajo!
Colocar gráficos lado a lado con gridBase
Otra forma de poner dos gráficos lado a lado es usando el paquete gridBase, que se encarga de la «integración de gráficos base y grid». Esto es útil cuando quieres poner un gráfico base de R y un ggplot lado a lado.
Funciona así: primero, activa los paquetes necesarios. En este caso, necesitas gridBase para poner los dos gráficos lado a lado, y grid y ggplot2 para crearlos:
library(grid)
library(gridBase)
library(ggplot2)
plot.new()
gl <- grid.layout(nrow=1,
ncol=2)
vp.1 <- viewport(layout.pos.col=1,
layout.pos.row=1)
vp.2 <- viewport(layout.pos.col=2,
layout.pos.row=1)
pushViewport(viewport(layout=gl))
pushViewport(vp.1)
par(new=TRUE,
fig=gridFIG())
plot(x = 1:10,
y = 10:1)
popViewport()
pushViewport(vp.2)
ggplotted <- qplot(x=1:10,y=10:1, 'point')
print(ggplotted, newpage = FALSE)
popViewport(1)
Si lo necesitas, puedes iniciar un gráfico vacío para configurar el diseño. Como quieres que los dos gráficos se generen lado a lado, esto requiere crear un diseño de cuadrícula con una fila y dos columnas.
Ahora, rellena las celdas de la cuadrícula con viewports. Estos definen regiones rectangulares en tu dispositivo gráfico con la ayuda de coordenadas dentro de esas regiones. En este caso, es mucho más práctico usar las especificaciones de la cuadrícula descritas arriba en lugar de coordenadas x o y reales. Por eso debes usar los argumentos layout.pos.col y layout.pos.row.
Como los viewports son solo descripciones o definiciones, estos objetos deben ser empujados (pushed) al árbol de viewports antes de ver cualquier efecto en el dibujo. Usa la función pushViewport() para lograrlo.
Ahora puedes proceder a añadir la primera región rectangular vp.1 al árbol ViewPort, después de lo cual le dices a R con gridFig() que dibuje un gráfico base dentro de un viewport de grid (vp.1). El argumento fig normalmente toma las coordenadas de la región de la figura en la región de visualización del dispositivo. En este caso, usas el argumento fig para iniciar un nuevo gráfico, añadiéndolo a un gráfico existente mediante new = TRUE en la función par(). Dibujas el gráfico base y eliminas el viewport del árbol:
plot.new()
gl <- grid.layout(nrow=1,
ncol=2)
vp.1 <- viewport(layout.pos.col=1,
layout.pos.row=1)
vp.2 <- viewport(layout.pos.col=2,
layout.pos.row=1)
pushViewport(viewport(layout=gl))
pushViewport(vp.1)
par(new=TRUE,
fig=gridFIG())
plot(x = 1:10,
y = 10:1)
popViewport()
Como quieres que los dos gráficos se generen lado a lado, quieres poner uno en la primera columna y el otro en la segunda, ambos en la primera fila.
Ten en cuenta que la función pushViewport() toma la función viewport(), que a su vez contiene un argumento layout. Este último indica «un objeto de diseño de cuadrícula que divide el viewport en subregiones».
Ten en cuenta también que puedes especificar en la función popViewport() un argumento para indicar cuántos viewports quieres eliminar del árbol. Si este valor es 0, indica que quieres eliminar los viewports hasta el viewport raíz. El valor por defecto de este argumento es 1.
Ve a añadir la segunda región rectangular vp.2 al árbol ViewPort. Luego puedes hacer el ggplot y eliminar el viewport del árbol.
pushViewport(vp.2)
ggplotted <- qplot(x=1:10,
y=10:1,
'point')
print(ggplotted,
newpage = FALSE)
popViewport(1)
Ten en cuenta que necesitas imprimir el objeto gráfico hecho por qplot() para dibujarlo y mostrarlo. Al mismo tiempo, especifica newpage = FALSE, de lo contrario solo verás el qplot()…
Además, recuerda que el valor por defecto de viewports a eliminar en la función popViewport() es 1. Esto hace que sea redundante poner popViewport(1) en el código.
13. Cómo representar varias líneas o puntos
Usar R base para representar varias líneas o puntos en el mismo gráfico
Para representar dos o más gráficos en el mismo, empieza haciendo un gráfico básico en R. Luego, añade más líneas o puntos. En este caso, añades más líneas, así que definirás más ejes y:Luego, verás que estas líneas se dibujan usando la función lines().
Esto da el siguiente resultado:
Ten en cuenta que la función lines() toma tres argumentos: el eje x, el eje y que quieres representar y el color (representado con el argumento col). También puedes incluir las siguientes características:
| Característica | Argumento | Entrada |
|---|---|---|
| Tipo de línea | lty |
Entero o cadena de caracteres |
| Grosor de línea | lwd |
Entero |
| Tipo de gráfico | pch |
Entero o carácter único |
| Estilo final de línea | lend |
Entero o cadena |
| Estilo unión de línea | ljoin |
Entero o cadena |
| Límite de inglete | lmitre |
Entero < 1 |
Aquí tienes algunos ejemplos:
lines(x,y2,col="green", lty = 2, lwd = 3)
lines(x,y2,col="green", lty = 5, lwd = 2, pch = 2)
lines(x,y3,col="black", lty = 3, lwd = 5, pch = 3, lend = 0, ljoin = 2)
lines(x,y4,col="blue", lty = 1, lwd = 2, pch = 3, lend = 2, ljoin = 1, lmitre = 2)
Ten en cuenta que el argumento pch no funciona muy bien con la función lines() y que es mejor usarlo solo con points().
points():
Puedes añadir los mismos argumentos a la función points() que usaste con lines() y que aparecen arriba. Sin embargo, hay algunas adiciones:
| Característica | Argumento | Entrada |
|---|---|---|
| Color de fondo (relleno) | bg |
Solo si pch = 21:25 |
| Expansión de carácter (o símbolo) | cex |
Entero |
Ejemplos de código de estos argumentos son los siguientes:
points(x,y4,col="blue", pch=21, bg = "red")
points(x, y5, col="yellow", pch = 5, bg = "blue")
Si incorporas estos cambios al gráfico que ves arriba, obtendrás el siguiente resultado:
Usar ggplot2 para representar varias líneas o puntos en un gráfico
El paquete ggplot2 te permite crear capas cómodamente, lo que te permite representar dos o más gráficos en el mismo gráfico de R sin dificultades:
14. Cómo fijar la relación de aspecto de tus gráficos en R
Si quieres guardar tu gráfico como imagen donde los ejes sean proporcionales a su tamaño, es señal de que quieres fijar la relación de aspecto.
Ajustar la relación de aspecto con R base
Cuando trabajas con comandos básicos de R para producir tus gráficos, puedes añadir el argumentoasp de la función plot(), completado con un entero, para establecer la relación de aspecto. Mira este primer ejemplo sin relación de aspecto definida:
asp:
Ajustar la relación de aspecto con ggplot2
Para fijar la relación de aspecto en gráficos ggplot2, añade la función coord_fixed(), que proporciona un «sistema de coordenadas de escala fija [que] fuerza una relación especificada entre la representación física de las unidades de datos en los ejes».
En otras palabras, esta función te permite especificar un número de unidades en el eje y que es equivalente a una unidad en el eje x. El valor por defecto es siempre 1, lo que significa que una unidad en el eje x tiene la misma longitud que una unidad en el eje y. Si tu relación se establece en un valor más alto, las unidades en el eje y son más largas que las unidades en el eje x y viceversa.
Compara los siguientes ejemplos:Ajustar la relación de aspecto con MASS
También puedes considerar usar el paquete MASS, que incluye la función eqscplot(): produce gráficos con escalas geométricamente iguales. Esto lo hace para diagramas de dispersión:
Truco: ¡te irá bien iniciar un nuevo marco de gráfico antes de ejecutar el código anterior!
Ten en cuenta que puedes dar argumentos adicionales a la función eqscplot() para personalizar el aspecto del diagrama de dispersión.
15. Para qué sirven hjust y vjust en ggplot2
Básicamente, usas estos argumentos cuando quieres establecer la posición del texto en tu ggplot. hjust te permite definir la justificación horizontal, mientras que vjust está pensado para controlar la justificación vertical. Consulta la documentación sobre geom_text() para más información.
Para demostrar qué ocurre exactamente, puedes crear un data frame a partir de todas las combinaciones de factores con la función expand.grid():
hjustvjust <- expand.grid(hjust=c(0, 0.5, 1),
vjust=c(0, 0.5, 1),
angle=c(0, 45, 90),
text="Text"
)
Ten en cuenta que hjust y vjust solo pueden tomar valores entre 0 y 1.
0significa que el texto está justificado a la izquierda; en otras palabras, todo el texto está alineado con el margen izquierdo. Esto es lo que sueles ver al trabajar con editores de texto como Microsoft Word.1significa que el texto está justificado a la derecha: todo el texto está alineado con el margen derecho.
ggplot(), definiendo el eje x e y como hjust y vjust respectivamente:
Observa también cómo los argumentos hjust y vjust se añaden a geom_text(), que se encarga de las anotaciones textuales del gráfico.
En el gráfico de arriba ves que el texto en el punto (0,0) está alineado a la izquierda, tanto horizontal como verticalmente. Por otro lado, el texto en el punto (1,1) está alineado a la derecha tanto en dirección horizontal como vertical. El punto (0.5,0.5) está justo en el medio: no está realmente alineado a la izquierda ni a la derecha en lo que respecta a las direcciones horizontal y vertical.
Ten en cuenta que cuando estos argumentos se definen para cambiar el texto del eje, la alineación horizontal para el texto del eje se define en relación con todo el gráfico, ¡no con el eje x!vjust para cambiar el texto del eje en la representación de tu gráfico:
Para ir a la excelente discusión original, de la que se adoptó el código anterior, haz clic aquí.
Como nota final…
Vale la pena echar un vistazo a este artículo, que enumera 10 consejos para que tus gráficos en R se vean lo mejor posible.
Además, si quieres saber más sobre visualización de datos, considera revisar el curso interactivo de DataCamp sobre visualización de datos con ggvis, impartido por Garrett Grolemund, autor de "Hands on Programming with R" y "Data Science with R".
¡O quizás te interese nuestro curso sobre informes con R Markdown!


