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

时间:2016-04-07 09:52:25

标签: python matplotlib venn-diagram matplotlib-venn

我制作了一个三维维恩图。我有三个问题似乎无法解决。

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

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

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

    < / LI>

    另一方面,我发现很难找到诸如“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")
    

1 个答案:

答案 0 :(得分:7)

  

移动圆圈标签的代码是什么(即&#34; Set1&#34;,&#34; Set2&#34;,&#34; Set3&#34;)因为现在距离太远了圈子。

类似的东西:

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

"A""B""C"是预定义的标识符,表示三组。

  

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

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

venn3_unweighted

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

subsets
  

在图表周围移动圆圈的代码是什么。

需要&#34;移动圈子&#34;有点不寻常 - 通常你要么想要定位圆圈,以便它们的交叉点大小与你的数据相对应,或者使用&#34;默认&#34;定位。函数venn3_unweighted(...., subset_areas=(10,1,1,1,1,1,1)) venn3满足这两个要求。任意移动圈子是可能的,但需要一些较低级别的编码和我的建议。

  

我发现很难找到诸如&#34; set_x&#34;,&#34; set_alpha&#34;等命令。应该是

调用venn3_unweighted时获得的对象是Matplotlib v.get_label_by_id对象。您可以阅读其方法和属性hereText返回的对象为v.get_patch_by_id,外观herehere供参考。