韦恩图除了用R
可以画之外,用python
也可以画,通过对两个阶段的对应的geneid
进行韦恩图展示,即可以知道两个阶段重叠的内容有多少,并通过写代码,取出两个阶段重叠部分的数据。
import matplotlib.pyplot as plt
import matplotlib_venn
# import venn as venn
from matplotlib_venn import venn2, venn3, venn2_circles
import csv
import numpy as np
list2 = []
with open('me.csv', encoding='utf-8') as f2:
f2_csv = csv.reader(f2)
for i, row1 in enumerate(f2_csv):
if i >= 1:
list2.append(row1[0]) #row1[0] 是一列geneid的内容
list3 = []
with open('oo.csv', encoding='utf-8') as f2:
f2_csv = csv.reader(f2)
for i, row3 in enumerate(f2_csv):
if i >= 1:
list3.append(row3[0]) #row3[0] 是一列geneid的内容
# 三组数据的画法,用venn3
# g = matplotlib_venn.venn3(subsets=[set(list), set(list2), set(list3)], # 传入三组数据
# set_labels=('Label 1', 'Label 2', 'Label 3'), # 设置组名
# set_colors=("#01a2d9", "#31A354", "#c72e29"), # 设置圈的颜色,中间颜色不能修改
# alpha=0.8, # 透明度
# normalize_to=1.0, # venn图占据figure的比例,1.0为占满
# )
# plt.show()
#两组数据的画法,用venn2
f = venn2(
subsets=[set(list2), set(list3)],
set_labels=('me', 'oo'),
set_colors=("#098154", "#c72e29"),
alpha=0.6, # 透明度
normalize_to=1.0)
f.get_patch_by_id('10').set_edgecolor('red')#左圈外框颜色
f.get_patch_by_id('10').set_linestyle('--')#左圈外框线型
f.get_patch_by_id('10').set_linewidth(2)#左圈外框线宽
f.get_patch_by_id('01').set_edgecolor('green')#右圈外框颜色
f.get_patch_by_id('11').set_edgecolor('blue')#中间圈外框颜色
# plt.show()
plt.annotate('intersection genes',
color='black',
xy=f.get_label_by_id('11').get_position() + np.array([0, 0.05]),
xytext=(20, 80),
ha='center', textcoords='offset points',
bbox=dict(boxstyle='round,pad=0.5', fc='grey', alpha=0.6),
arrowprops=dict(arrowstyle='-|>', connectionstyle='arc3,rad=-0.5', color='black')
)
plt.show()
plt.savefig('./me-oo') #保存为png图片