绘制两个不连续范围的所有排列

Plot all permutations of two discontinuous ranges

我想绘制出掷两个非常规六面骰子的所有可能结果:

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

以及每次排列时骰子掷得更高的颜色。

结果如下所示:

到目前为止,我已经尝试过:

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 我的 ggplot2 版本

所以我试图将 排列 放在 x 和 y 轴上,但是 ggplot2 绘制了 结果 ,这会造成重叠.如果我没有解释自己,请比较图像。

有没有人知道如何在 ggplot2 中制作它?

一个解决方案是添加两个辅助列,而不是掷骰子的结果,而是哪一面朝上。然后,您可以在轴上绘制滚动边并将标签更改为结果。如果您想更接近原始情节的美感,使用 geom_tile 可能会更容易。可能有更好的方法来做到这一点,但这在这里有效:

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))