2017-03-17 148 views
1

我有下面的工作代码。Python:维恩图:如何显示图内容?

from matplotlib import pyplot as plt 
import numpy as np 
from matplotlib_venn import venn3, venn3_circles 
Gastric_tumor_promoters = set(['DPEP1', 'CDC42BPA', 'GNG4', 'RAPGEFL1', 'MYH7B', 'SLC13A3', 'PHACTR3', 'SMPX', 'NELL2', 'PNMAL1', 'KRT23', 'PCP4', 'LOX', 'CDC42BPA']) 

Ovarian_tumor_promoters = set(['ABLIM1','CDC42BPA','VSNL1','LOX','PCP4','SLC13A3']) 

Gastric_tumor_suppressors = set(['PLCB4', 'VSNL1', 'TOX3', 'VAV3']) 
#Ovarian_tumor_suppressors = set(['VAV3', 'FREM2', 'MYH7B', 'RAPGEFL1', 'SMPX', 'TOX3']) 
venn3([Gastric_tumor_promoters,Ovarian_tumor_promoters, Gastric_tumor_suppressors], ('GCPromoters', 'OCPromoters', 'GCSuppressors')) 

venn3([Gastric_tumor_promoters,Ovarian_tumor_promoters, Gastric_tumor_suppressors], ('GCPromoters', 'OCPromoters', 'GCSuppressors')) 
plt.show() 

如何在这3个圆圈中显示每个集合的内容?颜色alpha为0.6。圈子必须更大以容纳所有符号。

回答

2

我不确定是否有一种简单的方法可以自动对任何可能的组合进行此操作。如果你准备做一些手工调整在具体的例子,开始类似的东西:

A = set(['DPEP1', 'CDC42BPA', 'GNG4', 'RAPGEFL1', 'MYH7B', 'SLC13A3', 'PHACTR3', 'SMPX', 'NELL2', 'PNMAL1', 'KRT23', 'PCP4', 'LOX', 'CDC42BPA']) 
B = set(['ABLIM1','CDC42BPA','VSNL1','LOX','PCP4','SLC13A3']) 
C = set(['PLCB4', 'VSNL1', 'TOX3', 'VAV3']) 

v = venn3([A,B,C], ('GCPromoters', 'OCPromoters', 'GCSuppressors')) 

v.get_label_by_id('100').set_text('\n'.join(A-B-C)) 
v.get_label_by_id('110').set_text('\n'.join(A&B-C)) 
v.get_label_by_id('011').set_text('\n'.join(B&C-A)) 
v.get_label_by_id('001').set_text('\n'.join(C-A-B)) 
v.get_label_by_id('010').set_text('') 
plt.annotate(',\n'.join(B-A-C), xy=v.get_label_by_id('010').get_position() + 
      np.array([0, 0.2]), xytext=(-20,40), ha='center', 
      textcoords='offset points', 
      bbox=dict(boxstyle='round,pad=0.5', fc='gray', alpha=0.1), 
      arrowprops=dict(arrowstyle='->',    
          connectionstyle='arc',color='gray')) 

注意,像v.get_label_by_id('001')回报matplotlib Text对象的方法,你可以自由配置它们根据自己的喜好(例如你可以通过调用set_fontsize(8)等来改变字体大小)。