13 年
手机商铺
公司新闻/正文
684 人阅读发布时间:2022-07-01 15:55
图表是数据探索的过程,它能让我们更直观的理解我们的数据。例如,在代谢组学分析中,PCA散点图可以通过散点的分布情况直观地展示样本间代谢水平的差异;相关性热图可以直观的展示差异物质间的关系。绘制图表是任何数据科学报告的重要组成部分。
matplotlib库是python中常用的绘制二维、三维图表的数据可视化工具。其主要特点如下:
接下来,我们将从常用函数的角度来介绍matplotlib的用法。
在matplotlib的一个图形输出窗口中,底层是一个Figure实例,通常称之为画布,包含一些可见和不可见的元素。在画布上,自然就是图形,这些图形就是Axes实例,Axes实例几乎包含了我们要介绍的matplotlib常见组成元素,如坐标轴、刻度、标题、线和标签等。Axes实例有x轴和y轴属性,也就是可以使用Axes.xaxis和Axes.yaxis来控制x轴和y轴相关组成元素,例如刻度线、刻度标签等。
这么多组成元素该如何操作呢?很幸运,matplotlib为我们准备API,通过调用API中的函数,便可以快速了解如何绘制这些组成元素了。接下来,我们就用下图来初识绘制matplotlib的图形组成元素的主要函数。
接下来,我们将介绍上图中这些函数的函数功能、调用方法、参数说明和调用展示,以了解API函数的使用方法和技术细节。
函数功能:用于绘制线图,展示变量变化趋势
函数调用方法:
plt.plot(x,y,ls="-",lw=3,label="plot figure")
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi, 1200)
y=np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.show()
plt.close()
运行结果如下图所示
函数功能:设置x轴的数值显示范围
函数调用方法:plt.xlim(xmin, xmax)
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi, 1200)
y=np.cos(x)
plt.plot(x,y,ls="-",lw=2,label="cos(x)plot",color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(0, 1)
plt.show()
plt.close()
运行结果如下图所示
函数功能:设置x轴标签文本
函数调用方法:plt.xlabel(string, color)
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi, 1200)
y=np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis",color="g") plt.show()plt.close()
运行结果如下图所示
函数功能:绘制刻度线的网格线
函数调用方法:
plt.grid(linestyle=":", color="grey")
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi, 1200)
y=np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis", color="g")
plt.grid(linestyle=":", color="grey")
plt.show()
plt.close()
运行结果如下图所示
函数功能:绘制平行于x轴的水平参考线
函数调用方法:
plt.axhline(y=0.0, color="r", ls="--", lw=2)
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi, 1200)
y=np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis", color="g")
plt.grid(linestyle=":", color="grey")
plt.axhline(y=0.0,color="r",ls="--", lw=1)
plt.axvline(x=5.0,color="r",ls="--", lw=1)
plt.show()
plt.close()
运行结果如下图所示
函数功能:绘制垂直于x轴的参考区域函数调用方法:
plt.axvspan(xmin=1.0,xmax=3.0,facecolor="g",alpha=0.2)参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi, 1200)
y=np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis", color="g")
plt.grid(linestyle=":", color="grey")
plt.axhline(y=0.0,color="r",ls="--",lw=1)
plt.axvline(x=5.0,color="r",ls="--",lw=1)
plt.axvspan(xmin=2,xmax=4,facecolor="g", alpha=0.3)
plt.axhspan(ymin=-0.25,ymax=0.25, facecolor="g", alpha=0.3)
plt.show()
plt.close()
运行结果如下图所示
函数功能:添加图形内容的标题
函数调用方法:plt.title(string, color="m")
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.0, 4*np.pi,1200)
y=np.cos(x)
plt.plot(x,y,ls="-",lw=2,label="cos(x)plot",color="k")
plt.legend()
plt.xlim(-0.5,10)
plt.ylim(-1,1)
plt.xlabel("x-axis",color="g")
plt.ylabel("y-axis",color="g")
plt.grid(linestyle=":",color="grey")
plt.axhline(y=0.0,color="r",ls="--",lw=1)
plt.axvline(x=5.0,color="r",ls="--",lw=1)
plt.axvspan(xmin=2,xmax=4,facecolor="g",alpha=0.3)
plt.axhspan(ymin=-0.25,ymax=0.25,facecolor="g",alpha=0.3)
plt.title("y=sin(x)",color="m")
plt.show()
plt.close()
运行结果如下图所示
函数功能:添加图形内容细节的注释文本
函数调用方法:
plt.annotate(string,xy=(0,1),xytext=(0+0.15,1.5),weight="bold",color="b",arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0.0, 4*np.pi, 1200)
y = np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis", color="g")
plt.grid(linestyle=":", color="grey")
plt.axhline(y=0.0, color="r", ls="--", lw=1)
plt.axvline(x=5.0, color="r", ls="--", lw=1)
plt.axvspan(xmin=2, xmax=4, facecolor="g", alpha=0.3)
plt.axhspan(ymin=-0.25, ymax=0.25, facecolor="g", alpha=0.3)
plt.title("y=sin(x)", color="m")
plt.annotate("maxinum", xy=(0, 1), xytext=(0+1, 0.8),
weight="bold", color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.show()
plt.close()
运行结果如下图所示
函数功能:添加图形内容细节的无指向型注释文本
函数调用方法:
plt.text(x,y,string,weight="bold",color="y")
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0.0, 4*np.pi, 1200)
y = np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis", color="g")
plt.grid(linestyle=":", color="grey")
plt.axhline(y=0.0, color="r", ls="--", lw=1)
plt.axvline(x=5.0, color="r", ls="--", lw=1)
plt.axvspan(xmin=2, xmax=4, facecolor="g", alpha=0.3)
plt.axhspan(ymin=-0.25, ymax=0.25, facecolor="g", alpha=0.3)
plt.title("y=sin(x)", color="m")
plt.annotate("maxinum", xy=(0, 1), xytext=(0+1, 0.8),
weight="bold", color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.text(x=5+0.1, y=np.cos(5), s="y=sin(x)", weight="bold", color="orange")
plt.show()
plt.close()
运行结果如下图所示
函数功能:标示文本标签图例
函数调用方法:plt.legend(loc="upper right")
参数说明:
函数调用展示:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0.0, 4*np.pi, 1200)
y = np.cos(x)
plt.plot(x, y, ls="-", lw=2, label="cos(x) plot", color="k")
plt.legend()
plt.xlim(-0.5, 10)
plt.ylim(-1, 1)
plt.xlabel("x-axis", color="g")
plt.ylabel("y-axis", color="g")
plt.grid(linestyle=":", color="grey")
plt.axhline(y=0.0, color="r", ls="--", lw=1)
plt.axvline(x=5.0, color="r", ls="--", lw=1)
plt.axvspan(xmin=2, xmax=4, facecolor="g", alpha=0.3)
plt.axhspan(ymin=-0.25, ymax=0.25, facecolor="g", alpha=0.3)
plt.title("y=cos(x)", color="m")
plt.annotate("maxinum", xy=(0, 1), xytext=(0+1, 0.8),
weight="bold", color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.text(x=5+0.1, y=np.cos(5), s="y=cos(x)", weight="bold", color="orange")
plt.legend(loc="lower left")
plt.show()
plt.close()
运行结果如下图所示
分析功能:在代谢组学分析中,利用PCA散点图可以直观地展示不同样本的整体代谢水平差异程度。
调用函数方法:plt.scatter(x, y, color, alpha, lw, label)
参数说明:
函数调用展示:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import *
X_score = [[-3.21199455, 2.88979616],
[-2.26432734, -2.31117014],
[-2.40467366, 0.34498281],
[-2.7862174, -1.3370816 ],
[ 2.61203387, 0.2885495 ],
[ 2.50901927, -0.19301178],
[ 2.79200178, 0.20771416],
[ 2.75415805, 0.11022088]]
X_score = np.array(X_score)
target_names = ["A", "B"]
colors = ["navy", "turquoise"]
y = np.array([0, 0, 0, 0, 1, 1, 1, 1])
n = X_score.shape[0]
hfn = 2*(n-1)*(n**2-1)/(n**2*(n-2))*f.ppf(0.95, 2, n-2)
rv = np.linspace(0, 2*np.pi, 100)
x1 = np.sqrt(np.var(X_score[:, 0], ddof=1)*hfn)*np.cos(rv)
y1 = np.sqrt(np.var(X_score[:, 1], ddof=1)*hfn)*np.sin(rv)
df_score = pd.DataFrame([x1, y1]).T
pc1_ratio = round(65.401, 1)
pc2_ratio = round(18.042, 1)
plt.figure()
for color, i, target_name in zip(colors, [0, 1], target_names):
plt.scatter(X_score[y == i, 0], X_score[y == i, 1], color=color, alpha=.8, label=target_name)
plt.plot(x1, y1, c="k")
plt.axhline(y= 0, color="grey")
plt.axvline(x= 0, color="grey")#linestyle="--"
plt.xlabel('PC1[' + str(pc1_ratio) + "%]")
plt.ylabel('PC2[' + str(pc2_ratio) + "%]")
plt.legend(loc="best", shadow=False, scatterpoints=1)
plt.close()
运行结果如下图所示
分析功能:在代谢组学分析中,饼图可以直观地展示样本中检测出的各类代谢物所占的比例
调用函数方法:plt.pie(x,startangle,autopct, wedgeprops, textprops)
参数说明:
函数调用展示:
def pie_plot(self):
data = self.kegg_pathway_mapping_list[2]
data["Super.Class"][data["Super.Class"].isna()] = "Others"
group_count = data["Super.Class"].value_counts()
group_per = np.round(group_count / np.sum(group_count), 5)
group_per = pd.DataFrame(group_per)
labels = group_per.index
plt.axes(aspect="equal")
wedges, texts, autotexts= plt.pie(x=group_per["Super.Class"], startangle=0, autopct="%.3f%%",
wedgeprops={"linewidth":0.5, "edgecolor":"green"},
textprops= {'fontsize':6, 'color':'black'})
plt.legend(wedges, labels, title="Super Class", loc="center left", bbox_to_anchor=(1, 0, 0.3, 1))
plt.setp(autotexts, size=8, weight="bold") #跟图中文字添加格式
plt.tight_layout()
plt.show()
plt.close()
运行结果如下如所示
代谢组学分析中几乎所有的图都可以利用matplotlib库绘制实现,除了上面展示的PCA散点图、分类饼图外,其他常见的如相关性热力图、雷达图(如下图所示),都可以利用matplotlib绘制出相应的图形。
《python数据可视化之matplotlib数据实践》