是否可以在“matplotlib”venn图表中放置标签而不是设置大小?

2024-10-04 03:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,以下代码:

import matplotlib.pyplot as plt
import matplotlib_venn as mv
import seaborn

cols = seaborn.color_palette(['orange', 'darkblue'])
plt.figure()

s1 = {'TIMP3', 'COL4A1', 'SERPINE1', 'SPARC', 'FBLN2', 'THBS2', 'SERPINE2', 'COL1A1', 'LTBP2'}
s2 = {'SPARK', 'FBLN1', 'VCAN', 'TIMP1', 'SERPINE2', 'SKIL', 'LTBP2', 'TIMP3', 'THBS2', 'TGFBR1', 'BGN', 'VEGFA', 'COL1A1', 'FBN1', 'FN1', 'COL4A1', 'MMP2', 'MMP14', 'COL1A2', 'PMPEA1', 'FGF2'}

mv.venn2_unweighted([s1, s2], ['Adult', 'Senescent'], set_colors=cols)
plt.show()

产生: enter image description here

但是,如果字符串属于每一组的标签在圆圈内,而不是每个集合的大小,这将对我很有用。这可能吗?在


Tags: importmatplotlibaspltseaborncolss2mv
1条回答
网友
1楼 · 发布于 2024-10-04 03:27:52

可以通过ID访问标签,ID是一个数字为0和1的字符串,表示集合。E、 如果v.get_label_by_id("01")是正在使用的venn图,g.v.get_label_by_id("01")会给你第二个圆的标签。在

因此,可以将绘图下面的标签设置为空字符串,而不是为每个内部标签设置新文本,重用已经存在的大小标签。在

import matplotlib.pyplot as plt
import matplotlib_venn as mv
import seaborn

cols = seaborn.color_palette(['orange', 'darkblue'])
plt.figure()

s1 = {'TIMP3', 'COL4A1', 'SERPINE1', 'SPARC', 'FBLN2', 'THBS2', 'SERPINE2', 'COL1A1', 'LTBP2'}
s2 = {'SPARK', 'FBLN1', 'VCAN', 'TIMP1', 'SERPINE2', 'SKIL', 'LTBP2', 'TIMP3', 'THBS2', 'TGFBR1', 'BGN', 'VEGFA', 'COL1A1', 'FBN1', 'FN1', 'COL4A1', 'MMP2', 'MMP14', 'COL1A2', 'PMPEA1', 'FGF2'}

v = mv.venn2_unweighted([s1, s2], ["",""], set_colors=cols)

labels = ['Adult', 'Senescent']

def label_by_id(label, ID):
    num = v.get_label_by_id(ID).get_text() 
    v.get_label_by_id(ID).set_text(label+"\n"+num)

for label, ID in zip(labels, ["10", "01"]):
    label_by_id(label, ID)

plt.show()

enter image description here

相关问题 更多 >