Chciałbym wykreślić wszystkie możliwe wyniki walcowania dwóch niekonwencjonalnych kości sześciostronnej:

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

I kolor, przez który rzuca się wyżej dla każdej permutacji.

Wynik wyglądałby tak:

enter image description here

Do tej pory próbowałem:

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 moja wersja GGLOT2

enter image description here

Próbuję więc umieścić apelowania na osiach X i Y, ale GgplOT2 działki Efekty , co tworzy nadmierne. Porównaj obrazy, jeśli nie wyjaśnam siebie.

Czy ktoś ma pomysł, jak można to zrobić w GgplOT2?

1
joel_jdmw 28 lipiec 2020, 10:05

1 odpowiedź

Najlepsza odpowiedź

Rozwiązaniem jest dodanie dwóch kolumn pomocniczych nie wynikającą z wyniku rolki matrycy, ale z którymi stroną skierowano do góry. Następnie możesz wykreślić walcowane boki na osi i zmienić etykiety do wyników. Jeśli chcesz zbliżyć się do estetyki oryginalnej działki za pomocą geom_tile może być łatwiejsze. Prawdopodobnie jest ładniejszy sposób, aby to zrobić, ale to działa tutaj:

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 lipiec 2020, 07:30