R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观;

在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以考虑用花瓣图来进行数据的可视化

比如下面这个例子:

来源于该链接  https://www.researchgate.net/figure/235681265_fig3_The-pan-genome-of-Sinorhizobium-The-flower-plots-and-Venn-diagrams-illustrate-the-number

A和D是我们常见的venn图,B和C 就是花瓣图了

在花瓣图中,我们能够看到两种信息;

1)所有样本共有的信息;

2)每个样本独有的信息;

花瓣图既美观,展示信息也很直观,那么这样的图如何画呢?

我在网上找了半天,也没找到现成的工具,只能自己写代码来画!

在写代码之前,首先来分析下这张图,每一片花瓣就是一个椭圆型,整幅图片可以看做有1个椭圆通过旋转得到

通过以上分析,我们只需要先画一个椭圆,然后循环旋转即可

中间的调试过程就不细讲了,直接看写好的代码

flower_plot <- function(sample, value, start, a, b, ellipse_col = rgb(135, 206, 235, 150, max = 255), circle_col = rgb(0, 162, 214, max = 255),circle_text_cex = 1.5) {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 / nres <- lapply(1:n, function(t){draw.ellipse(x = 5 + cos((start + deg * (t - 1)) * pi / 180), y = 5 + sin((start + deg * (t - 1)) * pi / 180), col = ellipse_col,border = ellipse_col,a = a, b = b, angle = deg * (t - 1))text(x = 5 + 2.5 * cos((start + deg * (t - 1)) * pi / 180),y = 5 + 2.5 * sin((start + deg * (t - 1)) * pi / 180),value[t])if (deg * (t - 1) < 180 && deg * (t - 1) > 0 ) {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 = circle_text_cex)} else {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 = circle_text_cex)}           })draw.circle(x = 5, y = 5, r = 1.3, col = circle_col, border = circle_col)
}

这里我写成了1个函数,函数的调用方式如下;

flower_plot(c("WSM419", "A321", "M1", "M2", "M22", "M58", "M102", "M161", "KH36b", "KH36c", "KH36d", "KH53a", "KH53b"),c(519, 556, 83, 62, 415, 425, 357, 441, 22, 41, 33, 44, 43), 90, 0.5, 2)

第一个参数为样本名字构成的向量,第二个参数为每个样本独有的数目,第三个参数为起始椭圆的角度,第四个参数为椭圆的短轴的长度,第五个参数为椭圆的长轴的长度

效果图如下:

R语言绘制花瓣图flower plot相关推荐

  1. R语言绘制火山图(volcano plot)实战:为差异表达基因(DEGs)添加颜色、基于显著性阈值进行点的颜色美化、为选定基因添加标签

    R语言绘制火山图(volcano plot)实战:为差异表达基因(DEGs)添加颜色.基于显著性阈值进行点的颜色美化.为选定基因添加标签 目录 R语言绘制火山图(volcano plot)实战 #导入 ...

  2. R语言绘制棒棒糖图(火柴杆图)

    本博客介绍几种利用R语言绘制棒棒糖图(火柴杆图)的方法. 2. 使用原生ggplot方法 最容易也是最简单想到的方法是直接使用ggplot2包进行更新,这里需要使用ggplot本身的特性,通过图层叠加 ...

  3. r语言绘制雷达图_用r绘制雷达蜘蛛图

    r语言绘制雷达图 I've tried several different types of NBA analytical articles within my readership who are ...

  4. R语言绘制线图(line)实战

    R语言绘制线图(line)实战 目录 R语言绘制线图(line)实战 #仿真数据 #基础线图

  5. R语言绘制空白图实战

    R语言绘制空白图实战 目录 R语言绘制空白图实战 #绘制空白图1 #绘制空白图2 #绘制空白图3

  6. 运用R语言绘制小提琴图

    运用R语言绘制小提琴图 一.概念 小提琴图是一种绘制连续型数据的方法,可以认为是箱形图与核密度图的结合体,与此同时,还可使用核密度图展示数据分布的'轮廓'效果,'轮廓'越大,即意味着数据越集中于该处, ...

  7. matlab 画qq图,科学网—[转载]R语言绘制QQ图 - 刘朋的博文

    R语言绘制QQ图 实例1: #############加载数据 data R R=apply(R,2,as.numeric) #R语言将字符串矩阵转化为数值型矩阵,apply()函数里面的第2个值,如 ...

  8. R语言绘制热图(其实是相关系数图)实践(二)corrplot包

    目录 前言 corrplot包简介 语法和常用参数介绍 函数语法 参数介绍 实践 summary 参考资料 前言 在我的上一篇的内容中(R语言绘制热图实践(一)pheatmap包 ),我以绘制相关系数 ...

  9. R语言绘制QQ图实战(qqplot函数、qqnorm函数、qqline函数)

    R语言绘制QQ图实战(qqplot函数.qqnorm函数.qqline函数) 目录 R语言绘制QQ图实战(qqplot函数.qqnorm函数.qqline函数)

  10. R语言绘制小提琴图geom_violin,如何给每个小提琴添加自定义直线?

    R语言绘制小提琴图geom_violin,如何给每个小提琴添加自定义直线? 效果如下图所示: 数据按照下面的方式进行存储 下面提供所需要的代码: #加载必要的包 rm(list = ls()) lib ...

最新文章

  1. ios多线程和进程的区别(转载)
  2. 1998-1999图灵奖
  3. 有段位的管理者,都是怎么管理的?
  4. 在Windows7 (SP1)配置IIS7.5 + .Net Framework 4.0.30319
  5. http请求响应的组成部分的介绍 用cherome查看请求响应内容 curl命令行的使用
  6. python降级-关于卸载:如何从Python 3.2降级到2.7?
  7. 也发一个自定义分页控件
  8. Oracle 获取本周、本月、本季、本年的第一天和最后一天
  9. struts2线程安全
  10. 关于plsql查询中文字符编码问题
  11. 由一道题目引发的为稳定与不稳定的排序思路
  12. 线报采集监控|人工智能+线报采集算法+大数据过滤无效线报
  13. html英文期刊参考文献,英文参考文献标准格式
  14. 鸿蒙系统充电慢,数据线充电慢怎么解决
  15. 浅谈一个人做微信公众号是靠什么盈利的
  16. 如何在苹果iPhone或iPad上启用SSL证书
  17. win10多用户同时远程桌面登陆Termsrv.dll(允许多个RDP会话)-win10最新2004版。
  18. wgs84坐标格式转换度分秒_ArcGIS坐标单位转换(米和度分秒之间是如何转换的?)...
  19. 内核辅助函数系列 001 --- __ffs(unsigned long word):第一个非 0 位
  20. Daily Scrum Meeting 11.12

热门文章

  1. ucfirst() strtoupper() strtolower()
  2. Mac中设置右键新建TXT文件
  3. 「超级右键」Mac上最强的右键菜单工具,让你效率飞起!
  4. 南宁Java程序员平均工资_南宁程序员平均工资 在南宁做程序员有一万工资吗
  5. 计算机怎么求标准偏差,如何计算Excel标准偏差?您必须知道这两个技巧
  6. Win11控制面板里没有高清音频管理器怎么办?
  7. onenote登录显示服务器问题,onenote启动不了怎么回事 onenote为什么登录显示无法连接...
  8. impala常用函数大全(超详细哦)
  9. python实现英雄联盟信息获取
  10. Profinet 协议