Можно ли поместить метки, а не задавать размер внутри диаграммы Венна `matplotlib_venn`?
Например, следующий код:
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()
Но было бы полезно для меня, если бы метки, строки которых принадлежат каждому набору, были внутри окружностей вместо (или, возможно, также) размера каждого набора. Это возможно?
1 ответ
Решение
Вы можете получить доступ к меткам по идентификатору, который представляет собой строку с номерами 0 и 1, обозначающими наборы. Например v.get_label_by_id("01")
дает метку второго круга, если v
является диаграммой Венна в использовании.
Следовательно, вы можете установить метки под графиком на пустые строки и вместо этого установить новые тексты для каждой из внутренних меток, повторно используя уже существующие метки размера.
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()