Ejemplos de gráficos de piruleta en R

El paquete “ggplot2” alberga uno de los gráficos más avanzados en R, a continuación se muestra la segunda parte de algunos ejemplos del potencial de este paquete gráfico.

Gráfico de líneas complejo (Lollipot2)

library(ggplot2) # Cargar la librería gráfica "ggplot2"
library(dplyr) # Cargar la librería de manipulación de dataframes "dplyr"

grupo <- factor(c("A","B","C","D","E","F","G","H","I","J"))
valor <- c(8,4,3,2,5,6,7,1,9,10)
datos <- data.frame(grupo=grupo,valor=valor)

datos <- datos %>% 
  arrange(valor) %>%
  top_n(6) %>%
  mutate(grupo = factor(grupo, levels = .$grupo))

ggplot() +
  geom_point(data = datos, aes(x = valor, y = grupo, color = grupo), size = 4) +
  geom_segment(data = datos, aes(x = 0, y = grupo, xend = valor, yend = grupo, color = grupo), size=2 ) +
  theme(legend.position = "none",
        axis.text.x = element_text(angle = 0, vjust = 0.5, hjust = 0.5)) +
  labs(
    x = "Valores",
    y = "Grupos",
    title = "Título",
    subtitle = "Subtitulo menos importante",
    caption = "\nPie de linea, para explicar lo que se vea conveniente"
  )

Gráfico de líneas complejo (Lollipot2)

library(ggplot2) # Cargar la librería gráfica "ggplot2"
library(dplyr) # Cargar la librería de manipulación de dataframes "dplyr"

grupo <- factor(c("A","B","C","D","E","F","G","H","I","J"))
valor <- c(8,4,3,2,5,6,7,1,9,10)
datos <- data.frame(grupo=grupo,valor=valor)

datos <- datos %>% 
  arrange(valor) %>%
  top_n(6) %>%
  mutate(grupo = factor(grupo, levels = .$grupo))

ggplot(datos, aes(valor, grupo, label = paste(round(valor, 0), "%")   )) +
        geom_segment(aes(x = 0, y = grupo, xend = valor, yend = grupo), color = rgb(1, 0, 0, 0.4), size=3) +
        geom_point(color = rgb(1, 0, 0, 0.6) , size = 14) +
        geom_text(nudge_x = 0 , color= "white") +
  theme(legend.position = "none",
        axis.text.x = element_text(angle = 0, vjust = 0.5, hjust = 0.5)) +
  labs(
    x = "Valores",
    y = "Grupos",
    title = "Título",
    subtitle = "Subtitulo menos importante",
    caption = "\nPie de linea, para explicar lo que se vea conveniente"
  )

## Gráfico de líneas complejo (Lollipot2 superiores e inferiores a la media)

library(ggplot2) # Cargar la librería gráfica "ggplot2"
library(dplyr) # Cargar la librería de manipulación de dataframes "dplyr"

datos <- datos %>%
        select(grupo, valor) %>%
        arrange(valor) %>%
        mutate(media = mean(valor, na.rm = TRUE),
               Tipo = ifelse(valor - media > 0, "Superiores a la media", "Inferiores a la media"),
               colores = ifelse(valor - media > 0, rgb(0, 0, 1, 0.5), rgb(1, 0, 0, 0.5)), # Blue y red
               grupo = factor(grupo, levels = .$grupo))

ggplot(datos, aes(valor, grupo, color = Tipo)) +
        geom_segment(aes(x = media, y = grupo, xend = valor, yend = grupo), color = datos$colores) +
        geom_point(size=3)

Gráfico de comparación de múltiples valores discretizados por una variable

library(ggplot2) # Cargar la librería gráfica "ggplot2"
library(dplyr) # Cargar la librería de manipulación de dataframes "dplyr"

sexo <- c(rep("man",20),rep("woman",20),rep("man",20),rep("woman",20))
valor <- 1:80
grupo <- c(rep("spain",25),rep("italy",25),rep("portugal",30))
datos <- data.frame(sexo=sexo, valor=valor, grupo=grupo)

datos.grupo.sexo <- datos %>%
        group_by(grupo, sexo) %>%
        summarise(valor = sum(valor, na.rm = TRUE)) %>%
        ungroup() %>%
        mutate(grupo = factor(grupo, levels = .$grupo))

datos.min <- datos.grupo.sexo %>%
        group_by(grupo) %>%
        arrange(desc(valor)) %>%
        top_n(1)

datos.max <- datos.grupo.sexo %>%
        group_by(grupo) %>%
        arrange(desc(valor)) %>%
        slice(2)

ggplot(datos.grupo.sexo, aes(valor, grupo)) +
        geom_line(aes(group = grupo ), color ="lightsteelblue4") +
        geom_point(aes(color = sexo), size = 4) +
        geom_text(data = datos.min, aes(color = sexo, label = round(valor, 0)),
                  size = 3, hjust = -.8) +
        geom_text(data = datos.max, aes(color = sexo, label = round(valor, 0)),
                  size = 3, hjust = 1.8) +
        scale_x_continuous(limits = c(0, 1600))

Gráfico de comparación de múltiples valores discretizados por una variable calculando su porcentaje de diferencia

library(ggplot2) # Cargar la librería gráfica "ggplot2"
library(dplyr) # Cargar la librería de manipulación de dataframes "dplyr"
library("tidyr") # Cargar la librería de manipulación de dataframes "tidyr" para la funcion spread

sexo <- c(rep("man",20),rep("woman",20),rep("man",20),rep("woman",20),rep("man",20), rep("woman",20))
valor <- 1:120
grupo <- c(rep("spain",25),rep("italy",25),rep("portugal",30),rep("germany",40))
datos <- data.frame(sexo=sexo, valor=valor, grupo=grupo)

datos.grupo.sexo <- datos %>%
        group_by(grupo, sexo) %>%
        summarise(valor = sum(valor, na.rm = TRUE)) %>%
        ungroup() %>%
        mutate(grupo = factor(grupo, levels = .$grupo))

datos.min <- datos.grupo.sexo %>%
        group_by(grupo) %>%
        arrange(desc(valor)) %>%
        top_n(1)

# Crear un data frame que identifique defierencias superiors al 20%
datos.dif <- datos.grupo.sexo %>% 
        spread(sexo, valor) %>% 
        group_by(grupo) %>% 
        mutate(Max = max(woman, man),
               Min = min(woman,man),
               Diff = Max / Min - 1) %>% 
        arrange(desc(Diff)) %>%
        filter(Diff > .2)

punto.maximo <- filter(datos.grupo.sexo, grupo %in% datos.dif$grupo)

etiqueta.dif <- datos.dif %>%
        select(grupo, valor = Max, Diff) %>%
        right_join(datos.min)

ggplot(datos.grupo.sexo, aes(valor, grupo)) +
        geom_line(aes(group = grupo), alpha = .3 ) +
        geom_point(aes(color = sexo), size = 1.5, alpha = .3) +
        geom_line(data = punto.maximo, aes(group = grupo)) +
        geom_point(data = punto.maximo, aes(color = sexo), size = 2) +
        geom_text(data = etiqueta.dif, aes(color = sexo, 
                                         label = paste(round(Diff*100,digits = 2),"%")),
                  size = 3, hjust = -.3)