數據格式如下
這里選擇fold值最大的前20個作圖進行展示
代碼如下
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
infpkm="gene_diff2019102206.xls"
genename="Aoc1"
picpathname="Aoc1.test"
df = pd.read_csv(infpkm,header=0,sep="\t")
#根據絕對值大小從大到小進行排序
df = df.reindex(df['log2FoldChange'].abs().sort_values(ascending=False).index)
#取前20行
df = df.iloc[:20,:]
#獲取最大的fold絕對值作為x軸的上下限
txlim = np.abs(df.loc[:,'log2FoldChange'].tolist()[0])
#獲取作圖的兩列
pre_draw=df[['Datebase_type','log2FoldChange']]
#選擇絕對值大於0.58496的數據
pre_draw = pre_draw[np.abs(pre_draw['log2FoldChange'])>0.58496]
#將所有絕對值大於3的整數設置3,絕對值大於3的負數,設置為-3
#df[np.abs(df)>3] = np.sign(df)*3
logfold = [float(n) for n in pre_draw['log2FoldChange'].tolist()]
ngroup = [str(n) for n in pre_draw['Datebase_type'].tolist()]
ax = sns.barplot(x=logfold, y=ngroup, color='blue', orient='h')
ax.set_title('20 Top FoldChange of Gene '+str(genename)+' expression in different dataset', fontsize=15)
ax.set_ylabel('Datebase name', fontsize=15)
ax.set_xlabel('Log2(Fold change)', fontsize=15)
ax.set_xlim([-txlim-0.25, txlim+0.25])
plt.savefig(picpathname+'.png', format='png', dpi=50, bbox_inches='tight')
plt.savefig(picpathname+'.pdf', format='pdf', dpi=100, bbox_inches='tight')
圖片效果如下: