Python: Matplotlib

概述

	# Version 
	pip install matplotlib=3.42

基础

matplotlib绘图原理:在画布(figure)上绘制坐标系(axes),其中各个元素标识如下:
在这里插入图片描述

种类(Sample plots in Matplotlib)

散点图(Scatter plots)

scatter()
在这里插入图片描述

椭圆图

Phoenix
在这里插入图片描述

线图(Line plot)

plot()
在这里插入图片描述

直方图(Bar charts)

bar()
在这里插入图片描述

柱状图的种类及作图

	import matplotlib.pyplot as plt
	
	fig, ax = plt.subplot(figsize(10, 10))
	
	

频率分布直方图(Histograms)

hist()
在这里插入图片描述

表格直方图(Tables)

tables()
在这里插入图片描述

饼图(Pie charts)

pie()
在这里插入图片描述

轮廓线和伪彩色(Contouring and pseudocolor)

pcolormesh()
contour()
在这里插入图片描述

极坐标(Ploar plots)

ploar()
在这里插入图片描述

3D

3D ploting
在这里插入图片描述

图例(legend)

legend()

其他很多

布局

方式一

plt.subplot() 只是返回一个 Ax

fig = plt.figure(figsize=(3, 5)) # 画布及大小
ax1 = plt.subplot(221)
ax2 = plt.subplot(222)
ax3 = plt.subplot(223)
ax4 = plt.subplot(224)

或者

	fig = plt.figure(figsize=(3, 5)) # 画布及大小
   	ax1 = fig.add_subplot(221)
   	ax1.set_title('Ax1')
   
   	ax2 = fig.add_subplot(222)
   	ax2.set_title('Ax2')
   
   	ax3 = fig.add_subplot(223)
   	ax3.set_title('Ax3')
   
   	ax4 = fig.add_subplot(224)
   	ax4.set_title('Ax4')

结果均如下
在这里插入图片描述

方式二

plt.subplots() 返回元组形式的 fig和Ax

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)
data = np.random.randn(2, 100)

fig, axs = plt.subplots(2, 2, figsize=(5, 5))
axs[0, 0].hist(data[0])
axs[0, 0].set_title('hist')

axs[1, 0].scatter(data[0], data[1])
axs[1, 0].set_title('line')

axs[0, 1].plot(data[0], data[1])
axs[0, 1].set_title('scatter')

axs[1, 1].hist2d(data[0], data[1])
axs[1, 1].set_title('psecolor')

plt.show()

或者

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)
data = np.random.randn(2, 100)

fig, ((axs1, axs2), (axs3, axs4)) = plt.subplots(2, 2, figsize=(5, 5))
axs1.hist(data[0])
axs1.set_title('hist')

axs2.scatter(data[0], data[1])
axs2.set_title('line')

axs3.plot(data[0], data[1])
axs3.set_title('scatter')

axs4.hist2d(data[0], data[1])
axs4.set_title('psecolor')

均如下结果
在这里插入图片描述

总结

  1. plt.subplot()或在已定义的fig中用fig.add_subplot(),这两种方式都只是返回一个ax类。好处是可以设置某几个子图公用y轴或x轴(sharex=,sharey=),但操作麻烦;
  2. plt.subplots()是预先定义好所有子图个数及布局后一次性返回fig和ax两个类;

风格(Styles)

print(plt.style.available)

在这里插入图片描述

plt.style.use('dark_background')
plt.tight_layout() # 很好用

颜色(Colors)

Tips

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 24 13:51:48 2020

@author: Bio-windows
"""

import numpy as np
import matplotlib.pyplot as plt

#数据
x = np.linspace(0.05, 10, 100)
y = np.cos(x)

#绘图
plt.plot(x, y, ls="-", lw=2, label="plot figure")
plt.scatter(x, y,label="scatter figure")

#坐标轴范围、标签
plt.xlim(-10, 20)
plt.xlabel("Time(seconds)")
plt.ylim(-2, 2)
plt.ylabel("Signal")

#标题
plt.title("Hello")
#图例
plt.legend(loc="upper left")
#网格
plt.grid(linestyle=":", color="r") #:->虚线,红色
#水平参考线
plt.axhline(y=0, ls=":", lw=2, c="g") #c=color,ls=line style,lw=line width
#水平参考区域
plt.axhspan(ymin=-0.5, ymax=0.5, facecolor="r", alpha=0.3) #facecolor填充颜色,alpha透明度
#垂直参考线
plt.axvline(x=5, ls=":", lw=3, c="b") #c=color,ls=line style,lw=line width
#垂直参考区域
plt.axvspan(xmin=1.5, xmax=6.5, facecolor="y", alpha=0.3)
#注释,函数annotate()一一添加图形内容细节的指向型注释文本
plt.annotate("This is the annotation", xy=(5, np.cos(5)), xytext=(6, np.cos(6)), arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
#函数text()一一添加图形内容细节的无指向型注释文本
plt.text(-5, np.cos(-5), "This is the text")


plt.show()

在这里插入图片描述

分析杂志记录:

fig, ax = plt.subplots(figsize=[5, 9])
ax.plt(x, y)
ax.set_title('Title')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_axvline(x=? , ls=":", lw=3, c="b") #
ax1 = ax.twinx() #ax1和ax公用x轴
ax1 = ax.twiny() #ax1和ax公用y轴
ax1.scatter(x= , y= )
ax1.set_xlabel('X1')
ax1.set_ylaber('Y1')

在这里插入图片描述

表达差异基因分析:

# -*- coding: utf-8 -*-
"""
Created on Fri Jul 24 10:50:31 2020

@author: Bio-windows
"""
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#read DEG.xls file
deg = pd.read_table('DEG.xls')

pValue_threshold = 0.00000000000001
FoldChange_threshold = 1



#Up and Down regulation genes
deg['ChangeMode'] = 'silver'
deg.loc[ (deg['log2.Fold_change.'] > FoldChange_threshold) & (deg['p.value'] < pValue_threshold), 'ChangeMode'] = 'red'
deg.loc[ (deg['log2.Fold_change.'] < -FoldChange_threshold) & (deg['p.value'] < pValue_threshold), 'ChangeMode'] = 'blue'


#Graphic building
fig, ax = plt.subplots()
ax.scatter(x=deg['log2.Fold_change.'], y=-np.log10(deg['p.value']), s=2, c=deg['ChangeMode'])
ax.set(ylabel='-log10(pValue)', xlabel='FoldChange', title='DeffExpGenes')
ax.set(xlim=(-10, 10), ylim=(0, 300))
ax.hlines(-np.log10(pValue_threshold), xmin=-10, xmax=10, color='dimgrey',linestyle='dashed', linewidth=1) #画竖水平线
ax.vlines(-FoldChange_threshold, ymin=0, ymax=250, color='dimgrey',linestyle='dashed', linewidth=1) #画竖直线
ax.vlines( FoldChange_threshold, ymin=0, ymax=250, color='dimgrey',linestyle='dashed', linewidth=1) #画竖直线

#整体调整
ax.spines['right'].set_visible(False) #remove right spines
ax.spines['top'].set_visible(False) #remove top spines


#save figures
plt.savefig('fig.pdf')


在这里插入图片描述

差异表达基因的聚类热图:

# -*- coding: utf-8 -*-
"""
Created on Fri Jul 24 14:13:41 2020

@author: Bio-windows
"""
import pandas as pd
import seaborn as sns

#read data files
ven = pd.read_excel('ven.xls')
ven1 = ven.set_index('genes')
#drawing
sns.clustermap(ven1)

在这里插入图片描述
在这里插入图片描述

差异基因venn图:

导出

matplotlib.rcParams['pdf.fonttype'] = 42 # Export pdf with Adobe Illust.. format
matplotlib.rcParams['ps.fonttype'] = 42 # Export pdf with Adobe Illust.. format

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值