2017-02-28

Cómo cambiar el ancho de las barras de error de un diagrama de caja con ggplot2

Problema

Deseamos modificar el ancho de las líneas de las barras de error en un diagrama de caja creado con ggplot2. Con stat_boxplot(geom ='errorbar') añadimos las barras de error.

library(ggplot2)
ggplot(iris, aes(factor(Species), Sepal.Width, fill = Species)) +
    geom_boxplot() + 
    stat_boxplot(geom ='errorbar')

Solución

Utilizamos el argumento width dentro de stat_boxplot.

library(ggplot2)
ggplot(iris, aes(factor(Species), Sepal.Width, fill = Species)) +
  geom_boxplot() + 
  stat_boxplot(geom ='errorbar', width = 0.5) 

Entradas relacionadas

2017-02-27

Cómo añadir barras de error a un diagrama de caja con ggplot2

Problema

Deseamos añadir barras de error a un diagrama de caja creado con ggplot2, como aparecen por defecto con el paquete base. De manera que tendremos dos líneas perpendiculares en los extremos de los bigotes de la caja.

library(ggplot2)
ggplot(iris, aes(factor(Species), Sepal.Width, fill = Species)) +
    geom_boxplot() 

Solución

Con stat_boxplot(geom ='errorbar') añadimos las barras de error.

ggplot(iris, aes(factor(Species), Sepal.Width, fill = Species)) +
  stat_boxplot(geom ='errorbar')+
  geom_boxplot() 
Es importante recordar que el orden de cada capa altera el resultado final. Si escribimos primero geom_boxplot la línea sólida vertical se dibuja encima de la caja.

ggplot(iris, aes(factor(Species), Sepal.Width, fill = Species)) +
    geom_boxplot() + 
    stat_boxplot(geom ='errorbar')

Entradas relacionadas

2017-02-17

Crear una hoja de Excel por cada valor de un filtro de una tabla dinámica

Problema

Queremos crear automáticamente una hoja por cada uno de los valores de un filtro de informe de una tabla dinámica. Por ejemplo, por cada año de la siguiente tabla dinámica.

Solución

  1. Clic en cualquier celda de la tabla dinámica.
  2. Dentro de la pestaña analizar, en el grupo Herramientas de tabla dinámica, clic en Opciones y seleccionamos Mostrar páginas de filtro de informes.
  3. En el cuadro de diálogo seleccionamos el campo deseado
  4. Se habrá generado una hoja por cada año.

Notas

Es necesario que el campo por el que deseamos crear las tablas esté como filtro de la tabla dinámica.

Referencias

2017-02-06

Dividir y guardar como ficheros subconjuntos de un data frame con R


Problema

Queremos guardar cada subconjunto de un data frame como un fichero de texto en el directorio de trabajo. En este ejemplo, utilizamos el conjunto de datos iris y crearemos un fichero CSV por cada una de las especies de la columna Species: setosa, versicolor, y virginica.

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Solución

Utilizamos el siguiente bucle para filtrar el data frame y creas los ficheros.

for (name in levels(iris$Species)) {
  # Filtramos el data frame y seleccionamos las columnas
  tmp <- subset(iris, select = -Species, Species == name)
  # Crea un nuevo fichero por cada especie
  fn <- paste(gsub(" ", "", name), ".csv", sep = "")
  # Por cada especie, guarda un CSV en el directorio de trabajo
  write.csv(tmp, fn, row.names = FALSE)
} 

Resultado

En el directorio de trabajo, se habrán guardo los ficheros correspondientes.

2017-01-30

Formato condicional para resaltar filas del mismo grupo


Problema

Para mejorar la legibilidad deseamos diferenciar grupos de filas mediante formato condicional. En nuestro ejemplo resaltaremos los productos que pertenecen al mismo pedido (columna A: Id. de pedido).

Es necesario que la columna en la que basamos los grupos sea numérica. En caso contrario, deberemos crear una columna auxiliar o utitilizar otra fórmula.

Solución

    Aplicamos el formato condicional.

Creamos una nueva regla con la siguiente fórmula.

=RESIDUO($A1;2)=0

Para aquellos números pares, cuyo resto o resíduo al dividir por dos sea cero, resaltará la celda con un relleno azul. El resto las dejará sin relleno.

Aplicamos la misma al rango de celdas deseado.

Resultado

Referencias

  • Resaltar filas alternas en Excel
  • Resaltar grupos de filas basados en el valor de una columna
  • 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

    2017-01-16

    Destacar subconjunto de puntos en un diagrama de dispersión con ggplot2

    Problema

    Deseamos resaltar un determinado número de puntos de un diagrama de dispersión. En nuestro ejemplo, usamos el conjunto de datos mpg (Fuel economy data from 1999 and 2008 for 38 popular models of car). Queremos destacar en rojo y con un tamaño mayor, aquellos cuyo displ (engine displacement) sea mayor de 5 y hwy (highway miles per gallon) mayor de 20.

    Solución

  • Alternativa 1
  • Añadimos la condición lógica para ambos atributos, color y tamaño del punto dentro de geom_point. Después cambiamos manualmente ambos con scale_colour_manual y scale_size_manual. Finalmente eliminamos la leyenda.

    ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy, colour = displ > 5 & hwy > 20, size = displ > 5 & hwy > 20)) + 
      scale_colour_manual(values = c("black", "red")) + 
      scale_size_manual(values =c(1.5, 3))+
      theme(legend.position = "none")
    
  • Alternativa 2
  • Creamos dos capas de puntos con geom_point. La primera en negro incluye todos los puntos. La segunda en rojo y con un tamaño de punto mayor para el subconjunto del data frame deseado.

    ggplot(data = mpg) + 
      geom_point(mapping = aes(x = displ, y = hwy), colour= "black") +
      geom_point(data = subset(mpg, displ > 5 & hwy > 20), aes(x = displ, y = hwy), colour= "red", size = 3)
     
    En ggplot2 las capas se añaden en el orden especificado en el código. Si alteráramos el orden de las dos capas (geom_point), obtendríamos el siguiente resultado.

    ggplot(data = mpg) + 
       geom_point(data = subset(mpg, displ > 5 & hwy > 20), aes(x = displ, y = hwy), colour= "red", size = 3) +
       geom_point(mapping = aes(x = displ, y = hwy), colour= "black")
     

    Entradas relacionadas

    2017-01-09

    Contar elementos únicos con una tabla dinámica en Excel

    Problema

    Queremos contar los elementos únicos de un campo mediante una tabla dinámica en Excel.

    Solución

    Antes del Excel 2013 esto no era posible. Con Excel 2013, 2016 y Office 365 es posible emplear la función de resumen Recuento distinto, siempre que usemos el modelo de datos en Excel.

    1. Al crear la tabla dinámica, seleccionamos: Agregar estos datos al modelo de datos y hacemos clic en Aceptar.
    2. Añadimos el campo que queremos contar en el área valores
    3. Clic en la flecha situada a la derecha del nombre del campo y luego selecciona la opción de Configuración de campo de valor.
    4. En Resumir campo de valor por seleccionamos Recuento distinto y clic en Aceptar.

    Resultado

    Se puede apreciar como el campo Recuento distinto de Campo 2 cuenta los elementos únicos. Mientras que Recuento de Campo 2 el número de valores no vacíos, el equivalente a CONTARA.

    Referencias

    Entradas relacionadas

    Nube de datos