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)
Hola, muchas gracias, me parece fabuloso todo lo que publicas. Quisiera preguntarte si sabes que tipo de grafico puedo utilizar para graficar una tabla de datos simbólicos?. Muchas gracias!
Perdon, una grafica para tabla de objetos simbolicos. Muchas gracias, saludos cordiales