0

假设我有一个数据,其中 group1 和 group2 都将一个从 0 到 4 的整数值分配给实体 a、b、c、d、e,所以:

data <- data.frame(data_id = c(letters[1:5], letters[1:5]), data_group =  c(replicate(5, "Group1"), replicate(5, "Group2")), data_value = c(0:4, replicate(5,2))) 

我想使用Rgeom_tile()中的ggplot包绘制这些值:

ggplot(data, aes(x=data_value, y=data_id)) + 
  geom_tile(aes(fill = data_group), width = 0.4, height = 0.8)

该图如下所示:

在此处输入图像描述

我的问题是实体c Group1 和 Group2 都分配相同的值 2,但红色瓷砖被蓝色瓷砖覆盖。理想情况下,我希望在这种情况下有一个分裂的瓷砖,即半红半蓝。有谁知道如何做到这一点?

提前谢谢了!

4

1 回答 1

1

我觉得最好的方法是将数据拆分为重叠和不重叠的集合,然后用单独的geom_tile命令绘制它们:

library(dplyr)

data <- data.frame(data_id = c(letters[1:5], 
                               letters[1:5]),
                   data_group =  c(replicate(5, "Group1"),
                                   replicate(5, "Group2")),
                   data_value = c(0:4, replicate(5,2))) 

data_unique <- data %>% ## non-overlapping data
  group_by(data_id, data_value) %>%
  filter(n() == 1)

data_shared <- data %>% ## overlapping data
  group_by(data_id, data_value) %>%
  filter(n() != 1)

ggplot(data,
       aes(x = data_value, y = data_id)) + 
  geom_tile(data = data_unique, aes(fill = data_group, group = data_group), 
            width = 0.4, height = 0.8) + ## non-overlapping data
  geom_tile(data = data_shared, aes(fill = data_group, group = data_group), 
            width = 0.4, height = 0.8, 
            position = "dodge") ## non-overlapping data
于 2020-08-20T09:11:08.260 回答