Me gustaría trazar todos los resultados posibles de lanzar dos dados de seis lados no convencionales:

die_1 <- c(0, 1, 2, 3, 6, 6)
die_2 <- c(0, 0, 0, 6, 6, 6)

Y el color por el cual el dado sale más alto para cada permutación.

El resultado se vería así:

enter image description here

Hasta ahora, he intentado:

library(tidyverse)
expand_grid(die_1, die_2) %>% 
  mutate(winner = if_else(die_1 > die_2, "die_1", if_else(die_1 == die_2, "draw", "die_2"))) %>%
  ggplot(aes(x = die_1, y = die_2, fill = winner)) +
  geom_point(aes(colour = winner), size = 10, shape = "square") +
  scale_discrete_manual(aesthetics = "colour", values = c("orange", "blue", "grey")) +
  scale_y_reverse(breaks = c(0:6)) +
  scale_x_continuous(position = "top", breaks = c(0:6)) 

Imgur mi versión ggplot2

enter image description here

Así que estoy tratando de poner las permutaciones en los ejes xey, pero ggplot2 traza los resultados , lo que crea una superposición. Por favor compare las imágenes si no me explico.

¿Alguien tiene una idea de cómo se podría hacer esto en ggplot2?

1
joel_jdmw 28 jul. 2020 a las 10:05

1 respuesta

La mejor respuesta

Una solución es agregar dos columnas auxiliares, no con el resultado de la tirada del dado, sino con qué lado estaba mirando hacia arriba. Luego, puede trazar los lados enrollados en el eje y cambiar las etiquetas a los resultados. Si desea acercarse a la estética de su trama original, usar geom_tile podría ser más fácil. Probablemente haya una forma mejor de hacer esto, pero esto funciona aquí:

die_1 <- c(0, 1, 2, 3, 6, 6)
die_2 <- c(0, 0, 0, 6, 6, 6)

expand_grid(die_1, die_2) %>% 
  mutate(die_1_side = c(rep(1,6),rep(2,6),rep(3,6),rep(4,6),rep(5,6), rep(6,6)),
         die_2_side = c(rep(c(1,2,3,4,5,6), 6) )) %>%
  mutate(winner = if_else(die_1 > die_2, "die_1", if_else(die_1 == die_2, "draw", "die_2"))) %>%
  ggplot(aes(x = die_1_side, y = die_2_side, fill = winner)) +
  geom_tile(aes(fill = winner), color = "white", size = 1) +
  scale_discrete_manual(aesthetics = "fill", values = c("orange", "blue", "grey")) +
  scale_y_reverse(breaks = c(1:6), labels = c(0,0,0,6,6,6)) +
  scale_x_continuous(position = "top", breaks = c(1:6), labels = c(0,1,2,3,6,6))

enter image description here

3
Mojoesque 28 jul. 2020 a las 07:30