Dotplots
Beatriz Valdez
El gráfico de puntos (dots) fue creado por William S. Cleveland en los años ochenta como alternativa a los gráficos de barras y a los gráficos de sectores (gráficos de torta) para representar datos categóricos. Los puntos representan las categorías y los valores asociadas con cada una. Cleveland sostiene que los gráficos de puntos no sólo representan mejor las variables, sino que, además, son más fáciles de interpretar. Sin embargo, los gráficos de punto son poco usados.
Quiero graficar algunas variables empleando dotcharts. Usaré también un viejo paquete de R que se emplea muy poco en la actualidad: lattice
Subo el paquete:
require(lattice)
Ejemplo 1
Transformo las categorías de la variable edades
en factor.
dotplot(as.factor(edades) ~ total, data=defuncionesEdades)
Las categorías no están correctamente ordenadas, por consiguiente necesito reordenarlas:
defuncionesEdades$grupos<-reorder(defuncionesEdades$edades,
defuncionesEdades$total)
# grafico de nuevo
dotplot(grupos ~ total, data=defuncionesEdades,
aspect=1.5, # estableco la relacion ancho-alto
xlab= "Distrito Capital. Numero de defunciones segun grupos de edad",
cex=1.25, # tamaño de los puntos
col="mediumpurple4", # color de los puntos
lty = 2 #tipo de lineas, en este caso, punteadas
)
Personalio el gráfico. Cambio los pánales
# el mismo grafico anterior pero usando explicitamente la funcion panel
dotplot(grupos ~ total, data=defuncionesEdades,
aspect = 1.5,
xlab = "Distrito Capital. Numero de defunciones segun grupos de edad",
panel = function (x, y) {
panel.dotplot(x, y,
cex = 1.25,
col = "mediumpurple4",
lty = 2)})
Se puede modificar la función panel.dotplot. Transformo el eje "y" de tal manera que sea numérico, lo que en el fondo transforma el gráfico en un gráfico de dispersión, pero permite que se ordenen los niveles de las categorías.
# el mismo grafico anterior pero usando
# explicitamente la funcion panel
dotplot(grupos ~ total, data=defuncionesEdades,
aspect = 1.5,
xlab = "Distrito Capital. Numero de defunciones segun grupos de edad",
panel = function (x, y) {
panel.abline(h = as.numeric(y),
col = "gray78",
lty = 2)
panel.xyplot(x, as.numeric(y),
cex = 1.25,
col = "mediumpurple4",
pch = 16,
lty = 2)
})
Si no deseo producir las líneas verticales:
# el mismo grafico anterior pero usando
# explicitamente la funcion panel
dotplot(grupos ~ total, data=defuncionesEdades,
aspect = 1.5,
xlab = "Distrito Capital. Numero de defunciones segun grupos de edad",
panel = function (x, y) {
panel.xyplot(x, as.numeric(y),
cex = 1.25,
col = "mediumpurple4",
pch = 16,
lty = 2)
})
O colocar las línaes parcialmente:
dotplot(grupos ~ total, data=defuncionesEdades,
aspect = 1.4,
xlab = "Distrito Capital. Numero de defunciones segun grupos de edad",
xlim= c(0,3100),
panel = function (x, y) {
panel.segments(rep(0,
length(x)),
as.numeric(y),
x, as.numeric(y),
col = "gray",
lty = 2)
panel.xyplot(x, as.numeric(y),
cex = 1.25,
col = "mediumpurple4",
pch = 16,
lty = 2)
})
Dotplot en comparaciones
#Primaria
dotplot(parroquia ~ Inicial, data=masculinidadParroquia,
aspect = 1.5,
xlim = c(90, 115),
xlab= list("Indice de masculinidad segun matricula y parroquia",
cex = 0.76),
panel = function (x, y) {
panel.abline(h = as.numeric(y),
lty = 2,
col = "gray80")
panel.xyplot(x, y, pch = 16,
col = "brown4",
cex = 0.75)
panel.xyplot(masculinidadParroquia$Primaria,
y, pch = 4, col = "lightskyblue",
cex = .6)},
key = list(text = list(c("Inicial", "Primaria"),
cex = .75),
points = list(pch = c(16, 4),
col = c("brown4",
"lightskyblue"),
cex = .75),
space = "top", border = T),
scales = list(y = list(cex = .6)) )
No hay comentarios.:
Publicar un comentario