Matplotlib是一个python 2D绘图库,利用它可以画出许多高质量的图像。
不过,不知道你有没有这种体验,在matlablib中画出同一个图,通常可以有好多种不同的代码实现。
所以,如果不把以下这几个概念搞明白,你在网上找代码的时候会很懵,一会儿plt、一会ax,云里雾里一般。
Figure(画板) 画一幅图,首先要确定画在哪里。所以,最先需要做的就是创建一个画板,对应图中红色的整体框架。
Axes(Subplot)(画纸、子图) 有了画板,拿来两张纸,开始画,其中一个就叫Axes1,另一个就是Axes2,对应绿色部分。
Axis(坐标轴) 横轴叫x坐标轴label,纵轴叫y坐标轴ylabel
生成这个图的代码如下:
import matplotlib.pyplot as plt import numpy as np %matplotlib inline #第一步创建画布 fig = plt.figure() # 如果不传入参数默认画板1 #第2步创建画纸,并选择画纸1 ax1=plt.subplot(2,1,1) #在画纸1上绘图 plt.plot() #选择画纸2 ax2=plt.subplot(2,1,2) #在画纸2上绘图 plt.plot() 显示图像 plt.show()Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
本文是在jupyter笔记本中使用Matplotlib。
对于中文乱码和数字为负数乱码的情况,可添加以下的代码:
plt.rcParams['font.sans-serif']=['SimHei'] # 防止中文乱码 plt.rcParams['axes.unicode_minus']=False # 如果需要将数字设为负数,也可能出现乱码的情况拿出一个Axes(subplot),看看细节吧。
当没有子图的时候,一个Figure就对应一个Axes,一套坐标轴。
最上方是标题Title
图例Legend 代表图形里的内容
网格Grid,True显示网格(图中没开网格)
坐标轴Axis,横轴叫x坐标轴label,纵轴叫y坐标轴ylabel
上图的代码如下:
plt.figure(figsize=(6, 3)) x = np.linspace(0, 10, 1000) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x, y1, color="blue", linewidth=1, label="sin") plt.plot(x, y2, color="red", linewidth=1, label="cos") plt.ylim(-1.1,1.1) plt.xlabel('X') #x轴标签 plt.ylabel('Y') #y轴标签 plt.legend(loc='best') #图列位置,可选best,center等 plt.title("三角函数曲线图") plt.show()matplotlib画图可以总结为3个步骤:获取数据——画出基本图形——设置细节。
按照这个维度(步骤),如果想按照子图分别显示两个曲线(Sinx 和Cosx),可以这样来分析。
第一部分、获取数据
横坐标的数据是用numpy模块生成0-10内等间隔的1000个整数,纵坐标为sin函数和cos函数。
import numpy as np x = np.linspace(0, 10, 1000) y1 = np.sin(x) y2 = np.cos(x)第二部分、画出基本图形
先创建画布,设置画布尺寸,然后在画纸1上绘制sinx,并设置线条宽度为1,颜色为蓝色;在画纸2上绘制cosx,设置线条宽度为1,颜色为红色。
plt.figure(figsize=(12, 2)) ax1 = plt.subplot(1,2,1) plt.plot(x, y1, color="blue", linewidth=1, label="sin") ax2 = plt.subplot(1,2,2) plt.plot(x, y2, color="red", linewidth=1, label="cos")第三部分、完善细节
添加横纵坐标标签、图例、标题等细节。
plt.xlabel('X') #x轴标签 plt.ylabel('Y') #y轴标签 plt.legend(loc='best') #图列位置,可选best,center等 plt.title("sin函数曲线图") plt.ylim(-1.1,1.1) plt.show()最终效果如图:
按照数据之间的关系,可以把可视化视图划分为 4 类。
比较:比较数据间的各类别
柱状图、条形图、雷达图
联系:变量之间的关系
散点图、桑葚图
构成:每个部分占整体的比例
饼图、环形图、旭日图、堆积图
分布:关注变量的分布情况
散点图、直方图、地图、热力图、面积图
有了上文中的逻辑结构,虽然每种图形显示的意义以及绘图的参数不尽相同,但框架都是一样的,万变不离其宗。
剩下的就是调细节啦!
这里推荐一篇我珍藏的知乎上的Matplotlib的入门文章,关于每种图形的详细参数都有详细介绍,可当做文档来查看。
https://zhuanlan.zhihu.com/p/70835617 (十分钟|matplotlib上手,开启你的python可视化)
另外,这张速查表,已经被推荐过很多次了。遇到小的细节,可随时翻看,回顾,值得收藏。
后台回复“速查表”
希望这篇文章能够帮你理清Matplotlib中的一些核心概念和整体框架,开始你的python可视化之旅。
-END-
往期精彩推荐 --
--1、这个在线代码编辑器,可以分享给任何人 --2、这是一份详细的Jupyter入门使用指南 --3、在Python中玩转Json数据-- 你 “在看” 我吗?