r - 如何编辑 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()
解决方案
编辑(下面的原始错误答案)
这是另一个尝试。据我所知,这是维恩图构建方式的结果。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()
推荐阅读
- python - 为什么我的代码似乎跳过了所有一半的功能?
- javascript - 向我的索引路由获取 API 发出 POST 请求
- javascript - 如何在包含按钮的预先存在的表中添加一行
- python - 从运行服务器中 Django 的自动重载中排除文件
- kotlin - ktor 在进行 https 重定向时重定向到 0.0.0.0
- mysql - 比较两个 MYSQL 表并按列返回缺失的日期和分组
- ios - 你能通过你的应用程序把一首歌放到你的 iPhone 上吗?
- ios - 如何使用代码更改主故事板上的 Label.text s?
- php - 来自php的成功响应后Ajax没有重定向
- php - PHP 的 escapeshellarg() 函数在 Windows 上被破坏了怎么办?