miércoles, 29 de mayo de 2024

Tutoriales

Dotplots

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.: