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

Python Venn3:如何重新定位圆和标签?,python,matplotlib,venn-diagram,matplotlib-venn,Python,Matplotlib,Venn Diagram,Matplotlib Venn,我做了一个三向维恩图。我有三个问题似乎无法解决 移动圆标签(即“Set1”、“Set2”、“Set3”)的代码是什么?因为现在一个标签离圆太远 使圆三个大小相等/更改圆大小的代码是什么 在绘图周围移动圆圈的代码是什么。现在,set2在set3内(但颜色不同),我希望该图看起来更像是显示维恩图的“标准”方式(即中间有一些重叠的3个独立圆) 另一方面,我发现很难找到诸如“set_x”、“set_alpha”之类的命令应该是什么;如果有人知道一本可以回答上述问题的手册,我将不胜感激,我似乎找不到一个地

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

  • 移动圆标签(即“Set1”、“Set2”、“Set3”)的代码是什么?因为现在一个标签离圆太远

  • 使圆三个大小相等/更改圆大小的代码是什么

  • 在绘图周围移动圆圈的代码是什么。现在,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")
    
    移动圆标签(即“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
    
    “A”
    “B”
    “C”
    是预定义的标识符,表示这三个集合

    使圆三个大小相等/更改圆大小的代码是什么

    如果您不希望圆/区域大小与您的数据相对应(不一定是一个好主意),可以使用函数
    venn3\u unweighted
    ,获得未加权(“经典”)Venn图:

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

    venn3_unweighted(...., subset_areas=(10,1,1,1,1,1,1))
    
    在绘图周围移动圆圈的代码是什么

    “移动圆”的需要有些不寻常-通常,您可能希望圆的定位使其交点大小与您的数据相对应,或者使用“默认”定位。功能
    venn3
    venn3\u未加权
    满足这两个要求。任意移动圆圈是可能的,但需要一些较低级别的编码,我建议不要这样做

    我发现很难找到诸如“set_x”、“set_alpha”之类的命令应该是什么


    调用
    v.get\u label\u by\u id
    时得到的对象是Matplotlib
    Text
    对象。您可以阅读它的方法和属性。
    v.get\u patch\u by\u id
    返回的对象是一个
    PathPatch
    ,请查看并参考。

    谢谢@KT.,事实上,一旦您为我整理了关于未加权的venn\u的问题;我不需要在绘图周围移动圆圈,这也解决了标签的问题。我会调查那些参考资料。很棒的帖子@KT!