#-----自己构建函数,利用椭圆旋转角度获得-----
flower_plot <- function(sample, otu_num, core_otu, start, a, b, r, ellipse_col, circle_col) {
# 设置绘图参数
par( bty = 'n', ann = F, xaxt = 'n', yaxt = 'n', mar = c(1,1,1,1))
# 创建一个空白绘图区域
plot(c(0,10),c(0,10),type='n')
# 获取样本数量并计算每个样本的旋转角度
n <- length(sample)
deg <- 360 / n
# 对每个样本进行操作
res <- lapply(1:n, function(t){
# 绘制椭圆
#使用三角函数计算椭圆的坐标,
#即在(5, 5)的基础上,
#增加cos((start + deg * (t - 1)) * pi / 180)的横坐标偏移和sin((start + deg * (t - 1)) * pi / 180)的纵坐标偏移
draw.ellipse(x = 5 + cos((start + deg * (t - 1)) * pi / 180),
y = 5 + sin((start + deg * (t - 1)) * pi / 180),
col = ellipse_col[t],# 设置椭圆的填充色
border = ellipse_col[t],# 设置椭圆的边框色
a = a, b = b, angle = deg * (t - 1))# 设置椭圆的参数
# 在椭圆内部添加样本对应的数值
#即在(5, 5)的基础上,
#增加2.5 * cos((start + deg * (t - 1)) * pi / 180)的横坐标偏移和2.5 * sin((start + deg * (t - 1)) * pi / 180)的纵坐标偏移,
#并将value[t]作为文本内容
text(x = 5 + 2.5 * cos((start + deg * (t - 1)) * pi / 180),
y = 5 + 2.5 * sin((start + deg * (t - 1)) * pi / 180),
otu_num[t])# 设置文本内容
# 确定样本标签文本的位置和方向
if (deg * (t - 1) < 180 && deg * (t - 1) > 0 ) {
# 如果角度位于(0, 180)之间
text(x = 5 + 3.3 * cos((start + deg * (t - 1)) * pi / 180),# 计算横坐标
y = 5 + 3.3 * sin((start + deg * (t - 1)) * pi / 180),# 计算纵坐标
sample[t],# 设置文本内容
srt = deg * (t - 1) - start,# 设置旋转角度
adj = 1,# 设置文本对齐方式
cex = 1# 设置文本大小
)
} else {
# 如果角度不在(0, 180)之间
text(x = 5 + 3.3 * cos((start + deg * (t - 1)) * pi / 180),# 计算横坐标
y = 5 + 3.3 * sin((start + deg * (t - 1)) * pi / 180),# 计算纵坐标
sample[t],# 设置文本内容
srt = deg * (t - 1) + start,# 设置旋转角度
adj = 0,# 设置文本对齐方式
cex = 1# 设置文本大小
)
}
})
# 在图的中心绘制一个圆
draw.circle(x = 5, y = 5, r = r, col = circle_col, border = NA)
# 在圆心添加标签
text(x = 5, y = 5, core_otu)
}
#-----绘图-----
ellipse_col <- c('#f0301c4E','#2B8BC34E','#FDA1004E','#54adf54E','#CDD7E24E','#9295C14E')
png('ZZM2.png', width = 1500, height = 1500, res = 200, units = 'px')
flower_plot(sample=c("LT_24h", "LT_72h", "LT_120h",
"vd592_24h", "vd592_72h", "vd592_120h"),
otu_num=c(3, 1, 7, 6, 5, 1),
core_otu=25,
start = 90,
a = 1.5,
b = 2,
r = 1,
ellipse_col = ellipse_col,
circle_col = 'white')
#参数a和b用于设置花瓣椭圆的尺寸,
#ellipse_col用于设置花瓣椭圆的颜色;
#参数r用于设置中心圆圈尺寸,
#circle_col用于设置中心圆圈的颜色
dev.off()
R花瓣图(flower plot)绘制
于 2024-01-30 20:55:43 首次发布