2017-03-17 152 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)等來改變字體大小)。