You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言ggVennDiagram绘制维恩图如何指定区域着色其余留白

R语言ggVennDiagram指定维恩图单个区域填充色实现方法

需求

使用R的ggVennDiagram包绘制维恩图时,需要实现指定区域自定义着色、其余区域保持空白的效果,例:将A ∩ B(集合A与B的交集)填充为红色,其余所有区域填充为白色。

当前使用代码

install.packages("ggplot2")
install.packages("ggVennDiagram")
library(ggplot2)
library(ggVennDiagram)

## Creating a Venn Diagram

# use data frame as input
test = list(A = 1:1,B = 1:1)

# create a Venn diagram and display all sets
ggVennDiagram(test,label = c("none")) + 
scale_fill_gradient(low = "blue",high = "black") + 
theme(legend.position = "none",plot.background = element_rect(fill = "steelblue"),
panel.border = element_rect(fill = NA),plot.margin = margin(10, 10, 10, 10))

当前代码运行效果:
当前维恩图运行效果

解决方案

原代码使用scale_fill_gradient将区域包含的元素数量映射为连续填充色,无法单独指定单个区域的颜色。ggVennDiagram输出为标准ggplot对象,两集合维恩图的3个独立区域都带有对应的分类标识,直接使用scale_fill_manual给每个区域手动指定填充色即可实现需求。
两集合维恩图的区域标识对应关系:

  • A:仅属于集合A的独有区域
  • B:仅属于集合B的独有区域
  • A/B:A与B的交集区域
    修改后的可运行代码:
library(ggplot2)
library(ggVennDiagram)

test = list(A = 1:1, B = 1:1)

ggVennDiagram(test, label = "none") +
  # 手动指定各区域填充色:交集为红色,其余区域为白色
  scale_fill_manual(
    values = c(
      "A" = "white",
      "B" = "white",
      "A/B" = "red"
    )
  ) +
  theme(
    legend.position = "none",
    plot.background = element_rect(fill = "steelblue"),
    panel.border = element_rect(fill = NA),
    plot.margin = margin(10, 10, 10, 10)
  )

如果需要绘制3个及以上集合的维恩图,只需先运行基础绘图代码,查看图层数据里的name字段拿到所有区域标识,再按上述方法逐个指定填充色即可。

内容的提问来源于stack exchange,提问作者user19354736

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:15:41