Python数据可视化绘制火山图示例
火山图是用来展示差异分析结果的常见可视化图形之一,该图形直观地展示了基于两组差异样本之间的显著性差异程度,常用于生物医药行业数据分析领域。下面给出Python数据可视化绘制火山图的详细攻略。
准备工作
在绘制火山图之前,需要安装matplotlib和pandas库。在安装完成后,接下来需要引入绘图库和数据读取模块。
import matplotlib.pyplot as plt
import pandas as pd
数据读取和处理
在进行数据可视化之前,需要读取并对数据进行处理。这里使用Pandas库读取Excel文件,并处理数据。
df = pd.read_excel('excel路径')
cond_less = df['Fold Change Log2'] <= -1
cond_more = df['Fold Change Log2'] >= 1
df_less = df[cond_less]
df_more = df[cond_more]
df_common = df[~(cond_less | cond_more)]
其中,cond_less
和cond_more
分别为筛选条件,df_less
和df_more
为筛选后的数据,df_common
则为剩下的数据。
绘制火山图
在对数据进行处理后,可以借助Matplotlib库开始绘制火山图。
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.scatter(df_less['Fold Change Log2'],-1 * np.log10(df_less['P value']),marker='o',c='r')
ax.scatter(df_more['Fold Change Log2'],-1 * np.log10(df_more['P value']),marker='o',c='g')
ax.scatter(df_common['Fold Change Log2'],-1 * np.log10(df_common['P value']),marker='o',c='k')
ax.set_xlabel('Log2(FC)')
ax.set_ylabel('-log10(P value)')
ax.set_xlim(-6,6)
ax.set_ylim(0,20)
plt.show()
其中,fig
和ax
是分别实例化一个Figure对象和一个Axes对象,用于设置图形的大小和位置等属性。ax.scatter()
则用于绘制散点图,其中marker
参数为标记样式,c
参数为颜色。
示例说明
示例1
下面给出一个具体的火山图实例。这次使用的数据集是Sun等人在2021年发表的文章<
import numpy as np
df = pd.read_excel('age.xlsx')
df_less = df[df['log2FC']<=-1]
df_more = df[df['log2FC']>=1]
df_common = df[(df['log2FC']>-1)&(df['log2FC']<1)]
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.scatter(df_less['log2FC'],-1*np.log10(df_less['padj']),marker='o',c='r',label='Down')
ax.scatter(df_more['log2FC'],-1*np.log10(df_more['padj']),marker='o',c='g',label='Up')
ax.scatter(df_common['log2FC'],-1*np.log10(df_common['padj']),marker='o',c='k',label='NS')
ax.set_xlabel('log2FC')
ax.set_ylabel('-log10AdjP')
plt.legend(loc='upper left')
ax.set_xlim(-6,6)
ax.set_ylim(0,25)
plt.show()
该示例绘制了所有样本的火山图,并标注了上调、下调、无显著差异样本。
示例2
使用Python对实验数据进行不同基因间的分组比较时,我们经常使用差异分析方法,如t检验、ANOVA、Person等方法。本示例使用模拟数据,使用t检验判断是否存在基因表达量的差异,并进行火山图分析。
import numpy as np
# 随机模拟表达水平
np.random.seed(100)
group1 = np.random.normal(30, 10, 50)
group2 = np.random.normal(35, 10, 50)
# 计算p值和FC值
from scipy import stats
p_values = []
for i in range(len(group1)):
t, p = stats.ttest_ind(group1[i], group2[i])
p_values.append(p)
log2FC = np.log2(group2 + 1) - np.log2(group1 + 1)
df = pd.DataFrame({'log2FC': log2FC, 'P value': p_values})
df_less = df[df['log2FC']<=-1]
df_more = df[df['log2FC']>=1]
df_common = df[(df['log2FC']>-1)&(df['log2FC']<1)]
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.scatter(df_less['log2FC'],-1*np.log10(df_less['P value']),marker='o',c='r',label='Down')
ax.scatter(df_more['log2FC'],-1*np.log10(df_more['P value']),marker='o',c='g',label='Up')
ax.scatter(df_common['log2FC'],-1*np.log10(df_common['P value']),marker='o',c='k',label='NS')
ax.set_xlabel('log2FC')
ax.set_ylabel('-log10P')
ax.set_ylim(0, 10)
plt.show()
该示例是模拟数据进行的火山图绘制,其中随机模拟了两组基因的表达水平,并随机计算了p值和FC值,最后用t检验方法判断是否存在表达差异。接下来,根据FC值和显著性水平的阈值绘制火山图。
结论
Python数据可视化绘制火山图是生物医药领域常用的可视化方式之一,通过示例演示,读者可以初步了解火山图的绘制方法和解读方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据可视化绘制火山图示例 - Python技术站