Primero, cargamos algunos paquetes.
library(reshape2)
library(ggplot2)
library(scales)
Estos son los datos del ejemplo de radarchart al que se ha vinculado.
maxmin <- data.frame(
total = c(5, 1),
phys = c(15, 3),
psycho = c(3, 0),
social = c(5, 1),
env = c(5, 1)
)
dat <- data.frame(
total = runif(3, 1, 5),
phys = rnorm(3, 10, 2),
psycho = c(0.5, NA, 3),
social = runif(3, 1, 5),
env = c(5, 2.5, 4)
)
Necesitamos un poco de manipulación para que sean adecuados para ggplot.
Normalícelos, agregue una columna de id. Y conviértelos a formato largo.
normalised_dat <- as.data.frame(mapply(
function(x, mm)
{
(x - mm[2])/(mm[1] - mm[2])
},
dat,
maxmin
))
normalised_dat$id <- factor(seq_len(nrow(normalised_dat)))
long_dat <- melt(normalised_dat, id.vars = "id")
ggplot también envuelve los valores para los primeros y últimos factores se reúnen. Agregamos un nivel de factor adicional para evitar esto. Esto ya no es cierto.
niveles (variable $ long_dat) < - c (niveles (long_dat $ variable), "")
Ésta es la trama. No es lo mismo, pero debería comenzar.
ggplot(long_dat, aes(x = variable, y = value, colour = id, group = id)) +
geom_line() +
coord_polar(theta = "x", direction = -1) +
scale_y_continuous(labels = percent)
Tenga en cuenta que cuando se utiliza coord_polar
, las líneas son curvas. Si quieres líneas rectas, tendrás que probar una técnica diferente.
dado que ggplot2 me da un mejor control sobre el título de la trama, etiquetas de escala xy, e incluso haciendo facetas, necesito hacer más de 30 diagramas de radar y quiero mostrarlos en 1 página, y esto me ayuda a entender mejor cómo funciona ggplot2 – lokheart
Puede hacer todo eso con gráficos base. par (mfrow = c (5,6)) y sus 30 parcelas (minúsculas) en una página. ¿Qué pasa con 'title ("Hello")' para títulos de trama? A veces el tiempo dedicado a entender ggplot2 es mejor dedicarlo con gráficos base ... – Spacedman
Creo que es una pregunta legítima querer hacer esto en ggplot2 –