Venn3:如何重新定位圆圈和标签?

Tom*_*Tom 5 python matplotlib venn-diagram matplotlib-venn

我做了一个三向维恩图.我有三个问题似乎无法解决.

  1. 移动圆圈标签的代码是什么(即"Set1","Set2","Set3")因为现在距离圆圈太远了.

  2. 将圆圈设为三个相同尺寸/更改圆圈尺寸的代码是什么?

  3. 围绕绘图移动圆圈的代码是什么.现在,set2在set3内(但颜色不同),我希望该图看起来更像是显示维恩图的"标准"方式(即3个独立的圆圈,中间有一些重叠).

另一方面,我发现很难找到诸如"set_x","set_alpha"之类的命令; 如果有人知道一本可以通过上述问题回答的手册我会很感激,我似乎无法找到一个包含我需要的所有信息的地方.

import sys
import numpy
import scipy
from matplotlib_venn import venn3,venn3_circles
from matplotlib import pyplot as plt

#Build three lists to make 3 way venn diagram with                                                                                                                             
list_line = lambda x: set([line.strip() for line in open(sys.argv[x])])
set1,set2,set3 = list_line(1),list_line(2),list_line(3)

#Make venn diagram                                                                                                                                                             
vd = venn3([set1,set2,set3],set_labels=("Set1","Set2","Set3"))

#Colours: get the HTML codes from the net                                                                                                                                      
vd.get_patch_by_id("100").set_color("#FF8000")
vd.get_patch_by_id("001").set_color("#5858FA")
vd.get_patch_by_id("011").set_color("#01DF3A")

#Move the numbers in the circles                                                                                                                                               
vd.get_label_by_id("100").set_x(-0.55)
vd.get_label_by_id("011").set_x(0.1)

#Strength of color, 2.0 is very strong.                                                                                                                                        
vd.get_patch_by_id("100").set_alpha(0.8)
vd.get_patch_by_id("001").set_alpha(0.6)
vd.get_patch_by_id("011").set_alpha(0.8)

plt.title("Venn Diagram",fontsize=14)
plt.savefig("output",format="pdf")
Run Code Online (Sandbox Code Playgroud)

KT.*_*KT. 8

移动圆圈标签的代码是什么(即"Set1","Set2","Set3")因为现在距离圆圈太远了.

像这样的东西:

lbl = vd.get_label_by_id("A")
x, y = lbl.get_position()
lbl.set_position((x+0.1, y-0.2))  # Or whatever
Run Code Online (Sandbox Code Playgroud)

"A","B""C"预定义的标识符,表示了三套.

将圆圈设为三个相同尺寸/更改圆圈尺寸的代码是什么?

如果您不希望圆/区域大小与您的数据相对应(不一定是个好主意),您可以使用以下函数获得未加权("经典")的维恩图venn3_unweighted:

from matplotlib_venn import venn3_unweighted 
venn3_unweighted(...same parameters you used in venn3...)
Run Code Online (Sandbox Code Playgroud)

您可以通过提供subset_areas参数来进一步欺骗和调整结果venn3_unweighted- 这是一个七元素向量,指定每个区域的所需相对大小.在这种情况下,图表将被绘制为好像区域区域subset_areas,但数字将从实际显示subsets.试试,例如:

venn3_unweighted(...., subset_areas=(10,1,1,1,1,1,1))
Run Code Online (Sandbox Code Playgroud)

围绕绘图移动圆圈的代码是什么.

"移动圆圈"的需要有些不同寻常 - 通常您要么定位圆圈以使其交叉点大小与您的数据相对应,或者使用"默认"定位.功能venn3venn3_unweighted迎合这两个要求.任意移动圈子是可能的,但需要一些较低级别的编码,我建议不要这样做.

我发现很难找到诸如"set_x","set_alpha"之类的命令

调用时得到的对象v.get_label_by_id是Matplotlib Text对象.您可以在此处阅读其方法和属性.返回的对象v.get_patch_by_id是a PathPatch,查看此处此处以供参考.