【问题标题】:Venn3: How to reposition circles and labels?Venn3:如何重新定位圆圈和标签?
【发布时间】:2016-04-07 09:52:25
【问题描述】:

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

  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")

【问题讨论】:

    标签: python matplotlib venn-diagram matplotlib-venn


    【解决方案1】:

    移动圆圈标签的代码是什么(即“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_unweighted 获得未加权(“经典”)维恩图:

    from matplotlib_venn import venn3_unweighted 
    venn3_unweighted(...same parameters you used in venn3...)
    

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

    venn3_unweighted(...., subset_areas=(10,1,1,1,1,1,1))
    

    在情节周围移动圆圈的代码是什么。

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

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

    调用v.get_label_by_id 时得到的对象是一个 Matplotlib Text 对象。你可以阅读它的方法和属性herev.get_patch_by_id返回的对象是PathPatch,参考herehere

    【讨论】:

    • 谢谢@KT。实际上,一旦您为我整理了有关 venn_unweighted 的问题;我不需要在情节周围移动圆圈,这也解决了标签的问题。将调查这些参考资料。
    • 很棒的帖子@KT!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多