Mostrando entradas con la etiqueta facet_grid. Mostrar todas las entradas
Mostrando entradas con la etiqueta facet_grid. Mostrar todas las entradas

2018-09-02

Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 2.1.

Gráfico a replicar

Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning. En esta ocasión replicaremos los gráficos de la figura 2.1. Utilizan el conjunto de datos Advertising. El gráfico representa las ventas en unidades de mil como una función de los presupuestos de televisión, radio o prensa, para 200 mercados. En cada gráfico se muestra la recta de regresión lineal que mejor se ajusta para las ventas y cada variable, descrito en el capítulo 3 del libro. En otras palabras, cada línea azul representa un modelo simple que puede ser usado para predecir las ventas usando la televisión, radio o prensa respectivamente.

Solución

library(tidyr)
library(ggplot2)
ad <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
ad_long <-  gather(ad, media, budgets,  TV:newspaper, factor_key = TRUE)
ggplot(ad_long, aes(x = budgets, y = sales, colour = media)) +
  geom_point()
ggplot(ad_long, aes(x = budgets, y = sales)) +
  geom_point() +
  facet_grid( ~ media, scales = "free") +
  geom_smooth(method = "lm")

Entradas relacionadas

2017-11-16

Cambiar el color y añadir leyenda en un diagrama de barras por subgrupos en ggplot2

Problema

Cuando creamos un diagrama de barras por subgrupos (facet_grid), aunque especifiquemos color para el eje x, ggplot2 crea un gráfico monocromático, sin cambiar el color de cada columna.

library("ggplot2")    
ggplot(data = diamonds) + 
      geom_bar(mapping = aes(x = color, y = ..prop.., group = 2)) + 
      scale_y_continuous(labels=scales::percent) +
      facet_grid(~cut)

Solución

Al calcular la proporción por grupo, necesitamos especificar en una aesthetics (aes) diferente el color para alterar el comportamiento por defecto de ggplot2. Una dentro de la función ggplot y otra dentro de geom_bar con fill.

ggplot(data = diamonds, aes(x = color, y = ..prop.., group = cut)) + 
  geom_bar(aes(fill = factor(..x.., labels = LETTERS[seq(from = 4, to = 10 )]))) + 
  labs(fill = "color") + 
  scale_y_continuous(labels = scales::percent) + 
  facet_grid(~ cut)

Referencias

2017-01-26

Destacar una barra de un diagrama de barras con ggplot2


Problema

Deseamos destacar una determinada barra de un diagrama de barras. En nuestro ejemplo, queremos cambiar el color de la barra 8 para las observaciones A de la columna Var, y la barra 10 de las observaciones B de la columna Var.

library(ggplot2)
set.seed(12345)
data <- data.frame(Var = c(rep("A", 50), rep("B", 50)), Value = round(rnorm(100, 10, 2), 0))
ggplot(data)+
  geom_histogram(aes(x = Value))+
  facet_grid(Var ~ .)

Solución

  • Colores por defecto.
  • Añadiendo las condiciones para el argumento fill dentro de aes (aesthetics) en geom_histogram. Eliminamos la leyenda con un tamaño desproporcionado con theme(legend.position = "none").

    ggplot(data) + 
      geom_histogram(aes(x = Value, 
                         fill = Value == 8 & Var == "A" | Value == 10 & Var == "B"), binwidth=0.5) +
      facet_grid(Var ~ .) + 
      theme(legend.position = "none")
     
  • Editando los colores.
  • Añadiendo las condiciones para el argumento fill dentro de aes (aesthetics) en geom_histogram. Eliminamos la leyenda con un tamaño desproporcionado con theme(legend.position = "none"). Editamos los colores con scale_fill_manual.

    ggplot(data) + 
      geom_histogram(aes(x = Value, 
                         fill = Value == 8 & Var == "A" | Value == 10 & Var == "B"), binwidth=0.5) +
      facet_grid(Var ~ .) + 
      scale_fill_manual(values = c("grey45", "red"))+
      theme(legend.position = "none")
     
  • Con un conjunto de datos mayor.
  • Añadiendo las condiciones para el argumento fill dentro de aes (aesthetics) en geom_histogram. Eliminamos la leyenda con un tamaño desproporcionado con theme(legend.position = "none").Ajustamos el ancho de las barras con bindwith.

    set.seed(12345)
    data <- data.frame(Var = c(rep("A", 50), rep("B", 50)), Value = round(rnorm(10000, 10, 10), 0))
    ggplot(data) + 
      geom_histogram(aes(x = Value, 
                         fill = Value == 8 & Var == "A" | Value == 10 & Var == "B"), binwidth = 0.5) +
      facet_grid(Var ~ .) + 
      theme(legend.position = "none")
     

    Entradas relacionadas

    Nube de datos