# 来源 https://www.r2omics.cn/
#' 花瓣图
#' @param sample 样本名称向量
#' @param num 数量向量
#' @param core 核心数量
#' @param start 起始角度(0-360度)
#' @param a 椭圆长轴长度
#' @param b 椭圆短轴长度
#' @param r 中心圆半径
#' @param ellipse_col 椭圆颜色向量
#' @param circle_col 中心圆颜色
#' @param alpha 透明度
#' @param nameSize 名称大小
#' @param numSize 数字大小
#' @param coreSize 共有名称大小
<- function(sample, num, core, start = 90, a = 0.5, b = 2,
flower_plot r = 1, ellipse_col, circle_col = "white",alpha,
nameSize=0.9,numSize=0.8,coreSize=1.2) {
= adjustcolor(ellipse_col, alpha.f = alpha)
ellipse_col
# 设置图形参数:无边框/坐标轴/边距,强制正方形输出
par(bty = 'n', ann = F, xaxt = 'n', yaxt = 'n', mar = c(1,1,1,1), pty = "s")
# 创建标准化坐标系统(0-10范围保证绘图比例)
plot(c(0,10), c(0,10), type = 'n', asp = 1) # asp=1强制坐标轴等比例
<- length(sample)
n <- 360 / n # 计算每个样本的间隔角度
deg
# 循环绘制每个样本的椭圆和标签
lapply(seq_len(n), function(t) {
# 计算当前椭圆中心坐标(极坐标转换)
<- (start + deg * (t - 1)) * pi / 180
angle <- 5 + cos(angle)
x_center <- 5 + sin(angle)
y_center
# 绘制椭圆花瓣
::draw.ellipse(
plotrixx = x_center,
y = y_center,
col = ellipse_col[t],
border = ellipse_col[t],
a = a, b = b,
angle = deg * (t - 1) # 椭圆旋转角度
)
# 添加数量标签(内层文字)
text(
x = x_center + (b-0.5) * cos(angle), # 0.5为偏移系数
y = y_center + (b-0.5) * sin(angle),
labels = num[t],
cex = numSize
)
# 添加样本名称标签(外层文字)
text(
x = 5 + (b+1.3) * cos(angle),
y = 5 + (b+1.3) * sin(angle),
labels = sample[t],
srt = ifelse(deg*(t-1) < 180 && deg*(t-1) > 0,
*(t-1) - start,
deg*(t-1) + start), # 自动调整文字旋转角度
degadj = ifelse(deg*(t-1) < 180 && deg*(t-1) > 0, 1, 0), # 自动对齐方式
cex = nameSize
)
})
# 绘制中心圆
::draw.circle(5, 5, r, col = circle_col, border = NA)
plotrixtext(5, 5, paste('Core:', core), cex = coreSize, font = 2)
}
R语言绘制韦恩图
前言
本篇是R语言绘制花瓣韦恩图的教程。
什么是花瓣韦恩图?
韦恩图只能画2到7个集合,当集合个数过多时,再画韦恩图就会很乱了。花瓣韦恩图可以展现所有集合共有的个数,以及每个集合独有的个数,较为清晰。
R语言绘制花瓣韦恩图
自定义函数
调用函数
flower_plot(
sample = paste0("A",1:10), # 样本名称向量
num = 1:10, # 数量向量
core = 12, # 核心数量
ellipse_col = c('#6181BD','#F34800','#640A0E','#930026','#464E04',
'#049a0b','#4E0C66','#D00000','#FF6C00','#FF00FF',
'#c7475b','#00F5FF','#BDA500','#A5CFED','#f0301c',
'#2B8BC3','#FDA100','#54adf5','#CDD7E2','#9295C1'),
start = 90,
a = 0.6, # 椭圆长度
b = 2, # 椭圆宽度
r = 1, # 中心圆半径
alpha=0.3, # 颜色透明度
nameSize=0.9, # 名称大小
numSize=0.8, # 数字大小
coreSize=1.2 # 共有名称大小
)