plot() es la función de graficado todoterreno de R
Para graficar en R, llama a plot(x, y) con dos vectores numéricos de la misma longitud. R dibuja un punto por cada par —el primer vector a lo largo del eje horizontal, el segundo a lo largo del eje vertical— y etiqueta los ejes con los nombres de las variables automáticamente:
x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)
plot(x, y)
El resultado es una nube de doce círculos huecos que sube de forma constante a medida que x crece. Ese es todo el precio de entrada: no hay paquetes que instalar ni configuración previa. plot() viene incluida en R base y es la función detrás de la mayoría de los gráficos exploratorios rápidos.
Como el ejecutor de código de esta página solo muestra salida de texto, las llamadas de graficado de este artículo son fragmentos estáticos: pégalos en RStudio o en cualquier sesión local de R para ver las imágenes. Lo que sí puedes ejecutar aquí es la preparación de los datos. De todos modos es un buen hábito: mira los números antes de graficarlos.
Si pasas un solo vector, plot(y) usa las posiciones de índice 1, 2, 3, ... como eje horizontal, algo muy práctico para echar un vistazo rápido a una secuencia de mediciones.
Elegir el tipo de gráfico
El argumento type decide cómo se dibujan los pares:
plot(x, y, type = "p") # points (the default)
plot(x, y, type = "l") # a connected line
plot(x, y, type = "b") # both: points joined by line segments
plot(x, y, type = "h") # vertical bars from zero, like a spike chart
plot(x, y, type = "s") # a step function
type = "l" convierte la nube de puntos en un gráfico de líneas, que es lo que quieres para cualquier cosa medida a lo largo del tiempo. type = "b" mantiene visibles las observaciones individuales sin dejar de mostrar la tendencia. type = "h" dibuja un segmento vertical fino desde cero hasta cada valor, y type = "s" dibuja una escalera que mantiene cada valor hasta el siguiente, útil para cantidades que cambian a saltos, como un precio o un recuento de inventario.
Títulos, etiquetas y colores
Un gráfico sin etiquetas es una nota privada para ti mismo. Tres argumentos lo arreglan: main para el título, xlab y ylab para las etiquetas de los ejes. col define el color:
plot(x, y,
type = "b",
main = "Monthly signups",
xlab = "Month",
ylab = "Signups (thousands)",
col = "steelblue")
col acepta tres tipos de valores:
- Colores con nombre:
"red","steelblue","tomato","darkgreen". R conoce 657; ejecutacolors()para listar todos los nombres. - Códigos hexadecimales:
col = "#2C7FB8", exactamente como en CSS. - Un vector de colores: uno por punto, que es como se colorean puntos por grupo:
col = c("tomato", "steelblue")[group]dondegroupes un factor.
Símbolos de puntos con pch, tamaños con cex y lwd
El círculo hueco por defecto está bien para explorar, pero queda turbio en cualquier cosa que muestres a otros. pch (plotting character) elige el símbolo, numerado del 0 al 25:
plot(x, y, pch = 19) # solid circle - the usual choice
plot(x, y, pch = 17) # solid triangle
plot(x, y, pch = 21, col = "black",
bg = "gold") # fillable circle: border + fill
Vale la pena memorizar dos números. pch = 19 es el círculo sólido que usan la mayoría de los gráficos terminados. pch = 21 hasta 25 son los símbolos rellenables: col colorea el borde y bg colorea el interior, con lo que obtienes puntos de dos tonos.
El tamaño y el estilo de línea tienen sus propios controles:
cexescala el tamaño de los puntos:cex = 1.5los hace la mitad más grandes.lwddefine el grosor de línea paratype = "l"o"b":lwd = 2es una línea sólida y legible.ltydefine el patrón de la línea:lty = 1continua,2discontinua,3punteada.
Capas: points(), lines() y abline()
plot() inicia un gráfico nuevo. Para dibujar encima de uno existente, usa sus funciones compañeras: añaden al gráfico actual en lugar de reemplazarlo:
plot(x, y, type = "l", lwd = 2, col = "steelblue",
main = "Actual vs. target")
points(x, y, pch = 19, col = "steelblue") # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40") # add a second series, dashed
abline(h = 10, col = "tomato") # horizontal reference line at y = 10
abline() es la herramienta de líneas de referencia y tiene tres modos:
abline(h = 10): una línea horizontal en un valor dado del eje vertical.abline(v = 6): una línea vertical en un valor dado del eje horizontal.abline(a = 0, b = 1.5): una línea definida por la ordenada al origenay la pendienteb.
Su mejor truco: pásale un modelo ajustado y dibuja la línea de regresión por ti: abline(lm(y ~ x)). Esa única línea convierte una nube de puntos en un argumento; la guía del gráfico de dispersión construye sobre ella.
Una regla a respetar: los límites de los ejes quedan fijados por la primera llamada a plot(). Si una serie añadida en capas se extiende más allá de ellos, se recorta; define xlim = y ylim = en el plot() original con suficiente holgura para todo lo que planees añadir.
Añadir una leyenda
En cuanto un gráfico tiene más de una serie, necesita una leyenda. legend() toma una palabra clave de posición como primer argumento —"topright", "topleft", "bottomright", "bottomleft", "top", "bottom" o "center" (son cadenas literales de R, así que se quedan en inglés en tu código)— y luego las etiquetas y los estilos correspondientes:
legend("topright",
legend = c("Actual", "Target"),
col = c("steelblue", "gray40"),
lty = c(1, 2),
pch = c(19, NA),
lwd = 2)
Los vectores col, lty y pch deben alinearse con legend entrada por entrada: la primera etiqueta recibe el primer color, y así sucesivamente. Usa NA para un estilo que no aplique a una serie (aquí, la línea objetivo no tiene puntos). La palabra clave ancla el recuadro a una esquina de la región del gráfico; elige la esquina que tus datos dejen vacía.
Múltiples paneles y guardado en un archivo
Para mostrar varios gráficos en una misma figura, configura la rejilla de graficado antes de dibujar: par(mfrow = c(1, 2)) divide el dispositivo en una fila y dos columnas, y las dos siguientes llamadas a plot() llenan los paneles en orden. Restablece con par(mfrow = c(1, 1)) cuando termines, o los gráficos siguientes seguirán saliendo diminutos.
Guardar en un archivo funciona redirigiendo el dibujo a un dispositivo de archivo en lugar de a la pantalla:
png("signups.png", width = 800, height = 600)
plot(x, y, type = "b", pch = 19, col = "steelblue",
main = "Monthly signups", xlab = "Month", ylab = "Signups")
dev.off()
Todo lo que hay entre png() y dev.off() acaba en el archivo; nada aparece en pantalla. Olvidar dev.off() es el bug clásico: el archivo queda bloqueado y vacío hasta que cierras el dispositivo. pdf(), jpeg() y svg() funcionan de la misma manera.
Lo que te llevas
plot(x, y)dibuja de inmediato;type =alterna entre puntos ("p"), líneas ("l") y ambos ("b").main,xlab,ylabetiquetan el gráfico;colacepta nombres de color (657 encolors()) o códigos hexadecimales.pch = 19es el círculo sólido;pch = 21–25separan borde (col) de relleno (bg);cex,lwd,ltycontrolan el tamaño y el estilo de línea.points(),lines()yabline()añaden capas sobre el gráfico existente;abline(lm(y ~ x))agrega una línea de regresión en una sola llamada.legend("topright", ...)etiqueta las series;png(...)+dev.off()guarda en un archivo.
Lo siguiente: el histograma, el gráfico de una sola variable al que recurrirás primero al conocer un dataset nuevo.
Preguntas frecuentes
¿Cómo se hace un gráfico en R?
Llama a plot(x, y) con dos vectores numéricos de la misma longitud. R abre una ventana gráfica y dibuja un punto por cada par. Añade type = "l" para un gráfico de líneas, main, xlab y ylab para los títulos, y col para el color.
¿Qué significa pch en R?
pch (plotting character) elige el símbolo del punto, numerado del 0 al 25. pch = 19 es el círculo sólido que la mayoría busca. Los símbolos 21 a 25 tienen un relleno independiente: col define el borde y bg el interior.
¿Cómo se añade una leyenda a un gráfico en R?
Llama a legend() después del gráfico, con una palabra clave de posición como "topright" como primer argumento, un vector legend = con las etiquetas, y los valores de col, pch o lty que usaste en el gráfico.
¿Cómo se guarda un gráfico de R en un archivo?
Abre un dispositivo de archivo antes de graficar y ciérralo después: png("myplot.png", width = 800, height = 600), luego tu código de graficado, luego dev.off(). No aparece nada en pantalla: el gráfico va directo al archivo.