局部整体(二)利用python绘制维恩图

news2024/11/16 1:39:15

局部整体(二)利用python绘制维恩图

维恩图( Venn Diagram)简介

1

维恩图显示集与集之间所有可能存在的逻辑关系,每个集通常以一个圆圈表示,每个集都是一组具有共同之处的物件或数据。当多个圆圈(集)相互重迭时,称为交集 (intersection),里面的数据同时具有重迭集中的所有属性。可以直观的寻找集合的共同点和差异点,缺点是集合过多(超过4个)就会显得杂乱不美观。

快速绘制

  1. 基于matplotlib_venn

    import matplotlib.pyplot as plt
    from matplotlib_venn import venn2
    
    # 利用venn2快速创建2组
    venn2(subsets = (10, 5, 2), set_labels = ('Group A', 'Group B'))
    
    plt.show()
    

    2

定制多样化的维恩图

自定义维恩图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

关于matplotlib_venn的更多用法可参考matplotlib-venn

  1. 利用venn3快速创建3组

    各位置的含义

    1:仅包含集合1的区域的大小

    2:仅包含集合2的区域的大小

    3:集合1和集合2的交集区域的大小

    4:仅包含集合3的区域的大小

    5:集合1和集合3的交集区域的大小

    6:集合2和集合3的交集区域的大小

    7:集合1,集合2和集合3的交集区域的大小

    import matplotlib.pyplot as plt
    from matplotlib_venn import venn3
    
    # 利用venn3快速创建3组
    venn3(subsets = (10, 8, 22, 6,9,4,2))
    
    plt.show()
    

    3

  2. 输入集合直接绘制

    import matplotlib.pyplot as plt
    from matplotlib_venn import venn3
    
    set1 = set([1, 2, 3, 4, 5])
    set2 = set([4, 5, 6, 7])
    set3 = set([5, 6, 7, 8, 9])
    
    # 利用venn3快速创建3组-输入集合
    venn3(subsets = [set1, set2, set3], set_labels = ('set1', 'set2', 'set3'))
    
    plt.show()
    

    4

  3. 修改参数

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from matplotlib_venn import venn3, venn3_circles
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    
    # 初始化布局
    fig = plt.figure(figsize=(8,8))
    
    # 自定义标签
    plt.subplot(2, 2, 1) 
    v=venn3(subsets = (10, 8, 22, 6,9,4,2), set_labels = ('Group A', 'Group B', 'Group C'))
    v.get_label_by_id('A').set_text('My Favourite group!')
    plt.title('自定义标签')
    
    
    # 自定义圆圈
    plt.subplot(2, 2, 2) 
    v=venn3(subsets = (10, 8, 22, 6,9,4,2), set_labels = ('Group A', 'Group B', 'Group C'))
    c=venn3_circles(subsets = (10, 8, 22, 6,9,4,2), linestyle='dashed', linewidth=1, color="grey")
    plt.title('自定义圆圈')
    
    
    # 自定义单组
    plt.subplot(2, 2, 3) 
    v=venn3(subsets = (10, 8, 22, 6,9,4,2), set_labels = ('Group A', 'Group B', 'Group C'))
    c=venn3_circles(subsets = (10, 8, 22, 6,9,4,2), linestyle='dashed', linewidth=1, color="grey")
    c[0].set_lw(8.0)
    c[0].set_ls('dotted')
    c[0].set_color('skyblue')
    plt.title('自定义单组')
    
    # 自定义背景色
    plt.subplot(2, 2, 4) 
    v=venn3(subsets = (10, 8, 22, 6,9,4,2), set_labels = ('Group A', 'Group B', 'Group C'))
    plt.gca().set_facecolor('skyblue')
    plt.gca().set_axis_on()
    plt.title('自定义背景色')
    
    plt.show()
    

    5

  4. 自定义细节

    from matplotlib import pyplot as plt
    import numpy as np
    from matplotlib_venn import venn3, venn3_circles
     
    # 绘制维恩图
    v = venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C'))
     
    # 自定义风格
    v.get_patch_by_id('100').set_alpha(1.0) # 获取集合'100'(代表只有第一个集合的部分),并设置透明度为1.0(完全不透明)
    v.get_patch_by_id('100').set_color('white') # 同上修改颜色
    v.get_label_by_id('100').set_text('Unknown') # 同上修改文本
    v.get_label_by_id('A').set_text('Set "A"') # 集合A的标签修改为【Set "A"】
    c = venn3_circles(subsets=(1, 1, 1, 1, 1, 1, 1), linestyle='dashed')
    c[0].set_lw(1.0) # 修改第一个圆图的线宽
    c[0].set_ls('dotted') # 修改第一个圆图为点线
     
    # 添加文本注释
    plt.title("Sample Venn diagram")
    plt.annotate('Unknown set', xy=v.get_label_by_id('100').get_position() - np.array([0, 0.05]), xytext=(-70,-70),
    ha='center', textcoords='offset points', bbox=dict(boxstyle='round,pad=0.5', fc='gray', alpha=0.1),
    arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5',color='gray'))
     
    plt.show()
    

    6

  5. 绘制文本类维恩图

    from matplotlib_venn import venn2, venn2_circles
    import matplotlib.pyplot as plt
    
    set1 = set(["苹果", "香蕉", "橘子"])
    set2 = set(["香蕉", "橘子", "葡萄"])
    
    venn = venn2([set1, set2], ('A', 'B'))
    
    venn.get_label_by_id('10').set_text('\n'.join(set1-set2))
    venn.get_label_by_id('01').set_text('\n'.join(set2-set1))
    venn.get_label_by_id('11').set_text('\n'.join(set1&set2))
    
    plt.show()
    

    7

  6. 引申-利用upset图展示更多集合关系

    from upsetplot import generate_counts, plot
    import matplotlib.pyplot as plt
    
    example = generate_counts()
    
    plot(example)
    plt.show()
    

    下面图中元素较多,但不难理解

    1、左下的条形图表示每个集合元素的数量

    2、下方的点图表示出现的所有交集情况

    3、上方的条形图对应交集内的元素数量

    更多方法可参考UpSetPlot documentation

    8

总结

以上通过matplotlib_venn快速绘制维恩图,并通过修改参数或者辅以其他绘图知识自定义各种各样的维恩图来适应相关使用场景。也介绍了如何使用upset图展示更多集合关系。

共勉~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Material-UI】File Upload Button 组件详解

文章目录 一、基础实现1. component"label"2. 隐藏的输入元素 二、样式和交互增强1. 自定义按钮样式2. 交互提示 三、支持多文件上传四、无障碍性(Accessibility)1. 提供 aria-label 或 aria-labelledby2. 支持键盘导航 五、高级用法和集成1. …

leetcode-215. 数组中的第K个最大元素

题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5…

STM32-低功耗模式详解

一、概述 低功耗模式(Low Power Mode)是为了减少电子设备的能耗而设计的操作模式,广泛应用于依赖电池供电的设备中,旨在延长电池寿命或减少能源消耗。在用户需要设备长时间工作或在电量极为有限的情况下非常实用,虽然牺…

如何在IDEA上使用JDBC编程【保姆级教程】

目录 前言 什么是JDBC编程 本质 使用JDBC编程的优势 JDBC流程 如何在IEDA上使用JDBC JDBC编程 1.创建并初始化数据源 2.与数据库服务器建立连接 3.创建PreparedStatement对象编写sql语句 4.执行SQL语句并处理结果集 executeUpdate executeQuery 5.释放资源 前言 在…

yandex 不定长旋转验证码PPOCR识别案例

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 某yandex 不定长旋转验证码如下: 可以看到,此种验证码非常变态,旋转角度不固定,干扰背景不固定,字符长度不固定,弯曲形变都是不固定的,在人眼都很难分辨验证…

『 C++ 』异常

文章目录 异常概念及使用自定义类型的异常C 标准库的异常体系异常的重新抛出异常安全异常规范异常的优缺点 异常概念及使用 C语言常见的错误处理机制如下: 返回值约定 通过定义一些列的返回值以及其对应的错误信息表述,通过不同的返回值来查看当前函数是否与调用成功; 通常情…

锂电池生产工艺数字化的业务架构.pptx

搜索《方案驿站》公众号进行下载。

【系统架构设计】数据库系统(五)

数据库系统(五) 数据库模式与范式数据库设计备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 备份与恢复 分布式数据库系统 数据仓库 数据挖掘 对数据挖掘技术进行支持的三种基础技术已经发展成熟&#xff0c…

【设计模式】六大原则-上

首先什么是设计模式? 相信刚上大学的你和我一样,在学习这门课的时候根本不了解这些设计原则和模式有什么用处,反而不如隔壁的C更有意思,至少还能弹出一个小黑框,给我个hello world。 如何你和我一样也是这么想&#xf…

2-56 基于matlab的图像融合增强技术

基于matlab的图像融合增强技术。通过原始图像——傅里叶变换——频率域滤波处理——傅里叶变换——增强后的图像。傅立叶变换以及傅立叶反变换.过程就是将空间的信息分解为在频率上的表示,通过傅立叶正反变换的处理,才使得频率域上的处理可以用于图像的增强。程序已调通&#x…

联想QuickFix工具中心,一款综合性电脑维护和管理工具

联想QuickFix工具中心是联想公司推出的一款综合性电脑维护和管理工具,它集成了众多实用的电脑维护工具,如系统优化、硬盘清理、网络优化、硬件诊断等,旨在为用户提供一个便捷的平台来解决电脑日常使用中遇到的各种问题。该工具中心适用于Wind…

AttributeError: ‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘. 已解决

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

【Linux---07】Shell脚本

文章目录 1. 前置说明1.1 创建shell脚本1.2 执行shell脚本1.3 调试shell脚本1.4 字符冲突 2. 变量2.1 创建&使用变量2.2 位置变量2.3 引号规则2.4 数值变量运算 3. 数组3.1 创建数组3.2 使用数组 4. 运算符4.1 比较运算符4.1.1 数字比较4.1.2 字符串比较 4.2 逻辑运算符4.3…

国内首个可调用API的视频模型,CogVideoX有多能打?

近期,智谱AI在其Maas开放平台(bigmodel.cn)发布了视频生成大模型CogVideoX,它提供了国内首个通过API来使用的文生视频和图生视频服务! 话不多说,我们直接来看一下通过CogVideoX生成的一部短片。 技术原理 CogVideoX融合了文本、…

CSP-J复赛-模拟题4

1.区间覆盖问题: 题目描述 给定一个长度为n的序列1,2,...,a1​,a2​,...,an​。你可以对该序列执行区间覆盖操作,即将区间[l,r]中的数字,1,...,al​,al1​,...,ar​全部修改成同一个数字。 现在有T次操作,每次操作由l,r,p,k四个值组成&am…

未授权访问漏洞系列详解⑦!

VNC未授权访问漏洞 VNC 是虚拟网络控制台 Virtual Network Console 的英文缩写。它是一款优秀的远程控制工具软件由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于 UNXI和 Linux 的免费开源软件由 VNC Server 和 VNC Viewer 两部分组成。VNC 默认端口号为 5900、590…

opencascade AIS_TypeFilter AIS_XRTrackedDevice源码学习

opencascade AIS_TypeFilter 前言 通过它们的类型选择交互对象。该过滤器会对本地上下文中的每个交互对象提出问题, 以确定它是否具有非空的所有者,并且如果是,则检查它是否是所需类型。 如果对象在每种情况下都返回 true,则保留…

运动控制卡——固高GTS

文章目录 前言什么是运动控制卡指示灯状态检测主卡指示灯状态说明端子板指示灯状态说明 软件调试(P39)何将控制器配置成脉冲模式设置与定位 编程C#编程 一些概念 前言 在一些控制多轴电机运动的场景下,除了需要驱动器驱动该轴的电机外,还需要用到控制卡…

kickstart自动部署

目录 一 准备工作二 安装软件及其相关配置配置步骤,图形引导部署web服务配置dhcp部署pxe 三 使用新机验证 一 准备工作 主机采用rhel7.9版本 本文使用图形化界面就行操作设置 取消VMware dhcp设置 yum group install "Server with GUI" init 5 #启动图…

vue3中使用logicFlow

浅结logicFlow使用: 应用场景:vue3中使用logicFlow绘制流程图 技术碎片应用: vue3:ref,reactive, onMounted, watchEffect,nextTick,inject logicFlow:节点,边,锚点,事件 官网&#…