跟着运来兄搭建自己的生物信息小书房。趁年轻,读几本硬书,到老了慢慢反刍。
在数据可视化领域,另一个不得不提的一个工具就是Matplotlib。其实我对python一直以来有一种若即若离的感觉,蒹葭苍苍的,有时候觉得可以通过机器学习好好学学python,有时候觉得可以通过搭建博客好好学学python,有时候觉得可以通过单细胞的scanpy和pyscenic好好学学python,有时候又觉得可以通过可视化好好学学python。
今天就来聊一下,python可视化工具Matplotlib。在这之前回顾一下MATLAB。
MATLAB
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室),是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
Matplotlib
Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块。它利用了 Python 下的数值计算模块 Numeric 及 Numarray,克隆了许多 Matlab 中的函数, 用以帮助用户轻松地获得高质量的二维图形。
Matplotlib 可以绘制多种形式的图形包括普通的线图,直方图,饼图,散点图以及误差线图等;可以比较方便的定制图形的各种属性比如图线的类型,颜色,粗细,字体的大小等;它能够很好地支持一部分 TeX排版命令,可以比较美观地显示图形中的数学公式。Matplotlib 掌握起来也很容易,由于 Matplotlib 使用的大部分函数都与 Matlab 中对应的函数同名,且各种参数的含义,使用方法也一致,这就使得熟悉 Matlab 的用户使用起来感到得心应手。对那些不熟悉的 Matlab 的用户而言,这些函数的意义往往也是一目了然的,因此只要花很少的时间就可以掌握。
Matplotlib涉及的逻辑基本上跟我们自己绘画的流程是一样的。
- 找一张纸或者一块画布;
- 调色等一系列前戏;
- 作画。
下面让我们用一个案例来看一看,Matplotlib如何点点滴滴画起一幅精美的统计图像的。也可以感受一下它和我们熟悉的ggplot2的风格和语法的差别。
代码语言:javascript复制# -*- coding: utf-8 -*-
"""
Created on Fri Jul 5 20:59:42 2019
@author: Administrator
"""
import matplotlib.pyplot as plt
from matplotlib.matlab import *
import numpy as np
from matplotlib.pyplot import cm as cm
import os
os.chdir("F:\learningPython")
x= np.linspace(0.5,3.5,100)
y = np.sin(x)
y1 = np.random.randn(100)
plt.scatter(x,y1,c= "0.25",label= "scatter figure")
plt.plot(x,y,ls="-",lw= 2,c="c",label= "plot figure")#,lable= "plot figure"
for spine in plt.gca().spines.keys():
plt.gca().spines[spine].set_color("none")
plt.gca().xaxis.set_ticks_position("bottom")
plt.gca().yaxis.set_ticks_position("left")
plt.xlim(0.0,4.0)
plt.ylim(-3.00,3.0)
plt.xlabel("x-label")
plt.ylabel("y-lalel")
plt.grid(True,linestyle=":",color="r")
plt.axhline(y=0.0,c="r",ls="--",lw=2)
plt.axvspan(xmin=1.0,xmax=2.0,facecolor="y",alpha=0.3)
plt.annotate("spines",
xy=(0.75,-3),
xytext=(0.35,-2.25),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b")
)
plt.annotate("maximum",
xy=(np.pi/2,1.0),
xytext=((np.pi/2) 1.0,.8),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b")
)
plt.annotate("",
xy=(0,-2.78),
xytext=(0.4,-2.32),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b")
)
plt.annotate("",
xy=(3.5,-2.98),
xytext=(3.6,-2.70),
weight="bold",
color="b",
arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b")
)
plt.text(3.6,-2.70,"'|' is tickline",weight="bold",color="b")
plt.text(3.6,-2.95,"3.5 is ticklabel",weight="bold",color="b")
plt.title("structure of matplotlib")
plt.legend()
plt.savefig('power.png', dpi=75)
plt.show()
本书介绍读matplotlib既有框架又有很多细节,如图例控制,文本展现。在学习matplotlib的过程中,再次理解可视化与统计学的关系,如何把数据与图形结合起来。