R中的ggplot-带有分色瓷砖的geom_tile

问题描述

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

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

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

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

图形如下:

enter image description here

我的问题是,对于实体 c ,Group1和Group2都分配了相同的值2,但是红色图块被蓝色图块覆盖。理想情况下,在这种情况下,我希望有一个分块的瓷砖,即半红色,半蓝色。有人知道怎么做吗?

非常感谢!

解决方法

我认为最好的方法是将数据分成重叠和不重叠的集合,然后用单独的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,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,height = 0.8,position = "dodge") ## non-overlapping data