R花瓣图(flower plot)绘制

#-----自己构建函数,利用椭圆旋转角度获得-----
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()

在这里插入图片描述

函数构建参考这里

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值