我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python matplotlib可视化之绘制韦恩图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python matplotlib可视化之绘制韦恩图

本文速览

2组数据venn

3组数据venn 

4组数据venn 

5组数据venn图

6组数据venn 

python中Matplotlib并没有现成的函数可直接绘制venn图, 不过已经有前辈基于matplotlib.patches及matplotlib.path开发了两个轮子:

matplotlib_venn【2~3组数据,比较多博客介绍】:https://github.com/konstantint/matplotlib-venn

pyvenn【2~6组数据】:https://github.com/tctianchi/pyvenn

1、 matplotlib_venn

该模块包含'venn2', 'venn2_circles',  'venn3', 'venn3_circles'四个关键函数,这里主要详细介绍'venn2','venn3'同理。

(1)2组数据venn图

matplotlib_venn.venn2(subsets, set_labels=('A', 'B'), set_colors=('r', 'g'), alpha=0.4, normalize_to=1.0, ax=None, subset_label_formatter=None)

绘图数据格式

subsets参数接收绘图数据集,以下5种方式均可以,注意细微异同。

#导入依赖packages
import matplotlib.pyplot as plt
from matplotlib_venn import venn2,venn2_circles#记得安装matplotlib_venn(pip install matplotlib_venn 或者conda install matplotlib_venn)
 
 
# subsets参数
#绘图数据的格式,以下5种方式均可以,注意异同
subset = [[{1,2,3},{1,2,4}],#列表list(集合1,集合2)
          ({1,2,3},{1,2,4}),#元组tuple(集合1,集合2)
          {'10': 1, '01': 1, '11': 2},#字典dict(A独有,B独有,AB共有)
          (3, 3, 2),####元组tuple(A有,B有,AB共有),注意和其它几种方式的异同点
          [3,3,2]#列表list(A有,B有,AB共有)           
         ]
for i in subset:
    my_dpi=100
    plt.figure(figsize=(500/my_dpi, 500/my_dpi), dpi=my_dpi)
    g=venn2(subsets=i)#默认数据绘制venn图,只需传入绘图数据
    plt.title('subsets=%s'%str(i))
    plt.show()

一些简单参数介绍 

my_dpi=150
plt.figure(figsize=(580/my_dpi, 580/my_dpi), dpi=my_dpi)#控制图尺寸的同时,使图高分辨率(高清)显示
g=venn2(subsets = [{1,2,3},{1,2,4}], #绘图数据集
        set_labels = ('Label 1', 'Label 2'), #设置组名
        set_colors=("#098154","#c72e29"),#设置圈的颜色,中间颜色不能修改
        alpha=0.6,#透明度
        normalize_to=1.0,#venn图占据figure的比例,1.0为占满
       )
plt.show()

所有圈外框属性设置 

my_dpi=150
plt.figure(figsize=(580/my_dpi, 580/my_dpi), dpi=my_dpi)
g=venn2(subsets = [{1,2,3},{1,2,4}],
        set_labels = ('Label 1', 'Label 2'),
        set_colors=("#098154","#c72e29"),
        alpha=0.6,
        normalize_to=1.0,
       )
g=venn2_circles(subsets = [{1,2,3},{1,2,4}], 
        linestyle='--', linewidth=0.8, color="black"#外框线型、线宽、颜色
       )
plt.show()

单个圈特性设置

g.get_patch_by_id('10')返回一个matplotlib.patches.PathPatch对象,有诸多参数可个性化修改 ,详细见matplotlib官网。

my_dpi=150
plt.figure(figsize=(550/my_dpi, 550/my_dpi), dpi=my_dpi)
 
g=venn2(subsets = [{1,2,3},{1,2,4}], 
        set_labels = ('Label 1', 'Label 2'), 
        set_colors=("#098154","#c72e29"),
        alpha=0.6,
        normalize_to=1.0,
       )
g.get_patch_by_id('10').set_edgecolor('red')#左圈外框颜色
g.get_patch_by_id('10').set_linestyle('--')#左圈外框线型
g.get_patch_by_id('10').set_linewidth(2)#左圈外框线宽
g.get_patch_by_id('01').set_edgecolor('green')#右圈外框颜色
g.get_patch_by_id('11').set_edgecolor('blue')#中间圈外框颜色
plt.show()

单个圈文本设置

g.get_label_by_id('10') 返回一个matplotlib.text.Text对象,有诸多参数可个性化修改 ,详细见matplotlib官网。

my_dpi=150
plt.figure(figsize=(600/my_dpi, 600/my_dpi), dpi=my_dpi)
g=venn2(subsets = [{1,2,3},{1,2,4}], 
        set_labels = ('Label 1', 'Label 2'), 
        set_colors=("#098154","#c72e29"),
        alpha=0.6,
        normalize_to=1.0,
       )
g.get_label_by_id('10').set_fontfamily('Microsoft YaHei')#左圈中1的字体设置为微软雅黑
g.get_label_by_id('10').set_fontsize(20)#1的大小设置为20
g.get_label_by_id('10').set_color('r')#1的颜色
g.get_label_by_id('10').set_rotation(45)#1的倾斜度

添加额外注释 

my_dpi=150
plt.figure(figsize=(580/my_dpi, 580/my_dpi), dpi=my_dpi)#控制图尺寸的同时,使图高分辨率(高清)显示
g=venn2(subsets = [{1,2,3},{1,2,4}], #绘图数据集
        set_labels = ('Label 1', 'Label 2'), #设置组名
        set_colors=("#098154","#c72e29"),#设置圈的颜色,中间颜色不能修改
        alpha=0.6,#透明度
        normalize_to=1.0,#venn图占据figure的比例,1.0为占满
       )
 
plt.annotate('I like this green part!', 
             color='#098154',
             xy=g.get_label_by_id('10').get_position() - np.array([0, 0.05]), 
             xytext=(-80,40),
             ha='center', textcoords='offset points', 
             bbox=dict(boxstyle='round,pad=0.5', fc='#098154', alpha=0.6),#注释文字底纹
             arrowprops=dict(arrowstyle='-|>', connectionstyle='arc3,rad=0.5',color='#098154')#箭头属性设置
            )
 
 
plt.annotate('She like this red part!', 
             color='#c72e29',
             xy=g.get_label_by_id('01').get_position() + np.array([0, 0.05]), 
             xytext=(80,40),
             ha='center', textcoords='offset points', 
             bbox=dict(boxstyle='round,pad=0.5', fc='#c72e29', alpha=0.6),
             arrowprops=dict(arrowstyle='-|>', connectionstyle='arc3,rad=0.5',color='#c72e29')
            )
 
plt.annotate('We both dislike this strange part!', 
             color='black',
             xy=g.get_label_by_id('11').get_position() + np.array([0, 0.05]), 
             xytext=(20,80),
             ha='center', textcoords='offset points', 
             bbox=dict(boxstyle='round,pad=0.5', fc='grey', alpha=0.6),
             arrowprops=dict(arrowstyle='-|>', connectionstyle='arc3,rad=-0.5',color='black')
            )
 
plt.show()

多子图绘制venn图 

fig,axs=plt.subplots(1,3, figsize=(10,8),dpi=150)
g=venn2(subsets = [{1,2,3},{1,2,4}], 
        set_labels = ('Label 1', 'Label 2'), 
        set_colors=("#098154","#c72e29"),
        alpha=0.6,
        normalize_to=1.0,
        ax=axs[0],#该参数指定
       )
g=venn2(subsets = [{1,2,3,4,5,6},{1,2,4,5,6,7,8}], 
        set_labels = ('Label 3', 'Label 4'), 
        set_colors=("#098154","#c72e29"),
        alpha=0.6,
        normalize_to=1.0,
        ax=axs[1],
       )
g=venn2(subsets = [{0,1,2,3},{1,2,4}], 
        set_labels = ('Label 5', 'Label 6'), 
        set_colors=("#098154","#c72e29"),
        alpha=0.6,
        normalize_to=1.0,
        ax=axs[2],
       )
plt.show()

(2)3组数据venn图

matplotlib_venn.venn3(subsets, set_labels=('A', 'B', 'C'), set_colors=('r', 'g', 'b'), alpha=0.4, normalize_to=1.0, ax=None, subset_label_formatter=None)

参数和venn2几乎一样,介绍几个重要参数 

基本参数介绍

my_dpi=150
plt.figure(figsize=(600/my_dpi, 600/my_dpi), dpi=my_dpi)#控制图尺寸的同时,使图高分辨率(高清)显示
g=venn3(subsets = [{1,2,3},{1,2,4},{2,6,7}], #传入三组数据
        set_labels = ('Label 1', 'Label 2','Label 3'), #设置组名
        set_colors=("#01a2d9", "#31A354", "#c72e29"),#设置圈的颜色,中间颜色不能修改
        alpha=0.8,#透明度
        normalize_to=1.0,#venn图占据figure的比例,1.0为占满
       )
plt.show()

个性化设置图中7部分每一部分

(100, 010, 110, 001, 101, 011, 111)分别代替每一小块,那么代替的是那一小块了? 

my_dpi=150
plt.figure(figsize=(600/my_dpi, 600/my_dpi), dpi=my_dpi)
g=venn3(subsets = [{1,2,3},{1,2,4},{2,6,7}],
        set_labels = ('Label 1', 'Label 2','Label 3'),
        set_colors=("#01a2d9", "#31A354", "#c72e29"),
        alpha=0.8,
        normalize_to=1.0,
       )
 
for i in list('100, 010, 110, 001, 101, 011, 111'.split(', ')):
    g.get_label_by_id('%s'%i).set_text('%s'%i)#修改每个组分的文本
    
#然后就可以如同venn2中那样个性化设置了
g.get_label_by_id('110').set_color('red')#1的颜色
g.get_patch_by_id('110').set_edgecolor('red')
 
plt.show()

2、pyvenn

同样,该库还是基于matplotlib.patches二次开发;

区别于上文,pyvenn支持2到6组数据;matplotlib_venn更加灵活多变。

pyvenn具有'venn2', 'venn3', 'venn4', 'venn5', 'venn6'五大主要函数,这里主要介绍venn2,其它同理。

2组数据venn

venn.draw_annotate、venn.draw_text、venn.venn2中的fill()参数非常助于个性化设置。

venn2(labels, names=['A', 'B'], **options)   
import matplotlib.pyplot as plt
 
#添加pyvenn路径
import sys
sys.path.append(r'path\pyvenn-master')
import venn
 
mycolor=[[0.10588235294117647, 0.6196078431372549, 0.4666666666666667,0.6],
         [0.9058823529411765, 0.1607843137254902, 0.5411764705882353, 0.6]]
 
labels = venn.get_labels([[1,2,3,4,5,6],[1,2,4,5,6,7,8]], fill=['number', 
                                                                'logic',#开启每个组分代码
                                                                'percent'#每个组分的百分比
                                                               ],
                        )
fig, ax = venn.venn2(labels,
                    names=list('AB'),
                    dpi=96,
                    colors=mycolor,#传入RPGA色号,直接传hex色号或者RGB会导致重叠部分被覆盖
                    fontsize=15,#控制组名及中间数字大小
                   
                    
                    )
plt.style.use('seaborn-whitegrid')
ax.set_axis_on()#开启坐标网格线
#ax.set_title('venn2')
 
 
 
# 提取plt.annotate部分参数
venn.draw_annotate(fig, ax, x=0.3, y=0.18, #箭头的位置
                   textx=0.1, texty=0.05, #箭尾的位置
                   text='Aoligei!', color='r', #注释文本属性
                   arrowcolor='r',#箭头的颜色等属性
                  )
 
#添加文本
venn.draw_text(fig, ax, x=0.25, y=0.2, text='number:logic(percent)',
               fontsize=12, ha='center', va='center')

3组数据venn

labels = venn.get_labels([range(10), range(5, 15), range(3, 8)], fill=['number',
                                                                       'logic',
                                                                       'percent'
                                                                      ]
                        )
fig, ax = venn.venn3(labels, names=list('ABC'),dpi=96)
fig.show()

4组数据venn

labels = venn.get_labels([range(10), range(5, 15), range(3, 8), range(8, 17)], fill=['number', 
                                                                                     'logic',
                                                                                     'percent'                                                                                     
                                                                                    ])
fig, ax = venn.venn4(labels, names=list('ABCD'))
fig.show()

5组数据venn

labels = venn.get_labels([range(10), range(5, 15), range(3, 8), range(8, 17), range(10, 20)], fill=['number',
                                                                                                    'logic',
                                                                                                    'percent'
                                                                                                   ])
fig, ax = venn.venn5(labels, names=list('ABCDEF'))
fig.show()

6组数据venn

labels = venn.get_labels([range(10), range(5, 15), range(3, 8), range(8, 17), range(10, 20), range(13, 25)], fill=['number', 'logic','percent'])
fig, ax = venn.venn6(labels, names=list('ABCDEF'))
fig.show()

以上就是Python matplotlib可视化之绘制韦恩图的详细内容,更多关于Python matplotlib韦恩图的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python matplotlib可视化之绘制韦恩图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python数据可视化之用Matplotlib绘制常用图形

目录一、散点图二、柱状图三、直方图四、扇形图总结一、散点图 散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。 特点:判断变量之间是否存在数量关联趋势,表示离群点的分布规律。散点图绘制:
2022-06-02

Python数据可视化实践之使用Matplotlib绘制图表

数据可视化是数据分析的重要环节,通过将数据转化为图形,可以更直观地展示数据特征和规律。Python中的Matplotlib库是一个强大的数据可视化工具,本文将带您了解Matplotlib的基本使用方法,以及如何绘制常见的图表
2023-05-18

 python如何用matplotlib可视化绘图

本篇文章为大家展示了 python如何用matplotlib可视化绘图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、Matplotlib 简介Matplotlib 简介:Matplotlib 是
2023-06-26

Python数据可视化之怎么用Matplotlib绘制常用图形

这篇文章主要介绍Python数据可视化之怎么用Matplotlib绘制常用图形,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、散点图散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或
2023-06-15

Matplotlib可视化之自定义颜色绘制精美统计图

自定义颜色 在生活中,我们可能对色彩的搭配与审美有自己的偏好,因此,我们可能希望matplotlib遵循自定义的颜色方案,以便所绘制的图形更好地适合文档或网页。 matplotlib中有多种定义颜色的方法,常见的方法包括: 1.三元组(Tr
2022-06-02

python数据可视化之饼状图的绘制

本篇文章给大家带来了关于python的相关知识,其中主要整理了饼状图的绘制相关问题,Pyplot 包含一系列绘图函数的相关函数,其中pie()函数可以绘制饼状图,下面一起来看一下,希望对大家有帮助。Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。 Pyplot 包含一系列绘图函数的相关函数,其中pie()函数可以绘制饼状图 用的时候,我们可以使用 impo
2022-06-22

python数据可视化之饼状图怎么绘制

这篇文章主要介绍“python数据可视化之饼状图怎么绘制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python数据可视化之饼状图怎么绘制”文章能帮助大家解决问题。Pyplot 是 Matplot
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录