首页 > 解决方案 > 如何编辑 ggVennDiagram 交叉点填充区域

问题描述

我没有使用全局ggVennDiagram来单独编辑情节的每个部分。

我正在使用自定义命名向量为组变量着色,但我得到交叉区域的灰色。我正在使用 alpha 值,所以我想重叠我的自定义颜色

有什么想法?谢谢

library(ggVennDiagram)
library(ggplot2)

genes <- paste0("gene",1:40)

gene_list <- list(
  A = genes[1:10],
  B = genes[1:20],
  C = genes[5:15],
  D = genes[30:40]
)

venn <- Venn(gene_list)
d <- process_data(venn)

col <- c(A = 'blue', B = 'red', C = 'green', D = 'orange')

ggplot() +
  geom_sf(aes(fill = name), data = venn_region(d)) +
  geom_sf(aes(color = name), data = venn_setedge(d)) +
  geom_sf_text(aes(label = name), data = venn_setlabel(d)) +
  geom_sf_text(aes(label = count), data = venn_region(d)) +
  scale_fill_manual(values = alpha(col, .2)) +
  scale_color_manual(values = col) +
  theme_void()

标签: rggplot2venn-diagram

解决方案


编辑(下面的原始错误答案)

这是另一个尝试。据我所知,这是维恩图构建方式的结果。d@region是一个由 15 个多边形组成的对象;ggplot 然后在我们调用geom_sf(aes(fill = name), data = venn_region(d)).

这是一个不完美的解决方案尝试。这将复制 venn 对象 ( d2 <- process_data(venn)),然后从形状的轮廓 ( ) 创建多边形d2@region <- st_polygonize(d@setEdge)。然后使用这些多边形绘制圆圈/填充。

library(ggVennDiagram)
library(ggplot2)
library(sf)

genes <- paste0("gene",1:40)

gene_list <- list(
A = genes[1:10],
B = genes[1:20],
C = genes[5:15],
D = genes[30:40]
)

venn <- Venn(gene_list)
d <- process_data(venn)
d2 <- process_data(venn)

d2@region <- st_polygonize(d@setEdge)

col <- c(A = 'blue', B = 'red', C = 'green', D = 'orange')

ggplot() +
geom_sf(aes(fill = name), data = venn_region(d2)) +
geom_sf(aes(color = name), data = venn_setedge(d)) +
geom_sf_text(aes(label = name), data = venn_setlabel(d)) +
geom_sf_text(aes(label = count), data = venn_region(d)) +
scale_color_manual(values = alpha(col, .2)) +
scale_fill_manual(values = alpha(col, .2)) +
theme_void()

在此处输入图像描述


我没有得到交叉区域的灰色,而是一条指向scale_fill_manual需要超过 4 个颜色值的消息。

按照 StackOverflow 关于创建颜色渐变的帖子的答案,可以为您提供的颜色设置颜色渐变。然后这些用于填充相交区域,4 种颜色是区域的轮廓。

library(ggVennDiagram)
library(ggplot2)

genes <- paste0("gene",1:40)

gene_list <- list(
  A = genes[1:10],
  B = genes[1:20],
  C = genes[5:15],
  D = genes[30:40]
)
      
venn <- Venn(gene_list)
d <- process_data(venn)
    
# vector for colors
    colorGroups <- c(A = 'blue', B = 'red', C = 'green', D = 'orange')        
# use colorRampPalette to create function that interpolates colors 
    colfunc <- colorRampPalette(colorGroups)
# call function and create vector of 15 colors
    col <- colfunc(15)
    
ggplot() +
  geom_sf(aes(fill = name), data = venn_region(d)) +
  geom_sf(aes(color = name), data = venn_setedge(d)) +
  geom_sf_text(aes(label = name), data = venn_setlabel(d)) +
  geom_sf_text(aes(label = count), data = venn_region(d)) +
  scale_fill_manual(values = alpha(col, .2)) +
  scale_color_manual(values = colorGroups) +
  theme_void()

在此处输入图像描述


推荐阅读