一、前言
本文介绍使用 Python 的 Matplotlib 工具实现数据可视化的方法。Matplotlib 是建立 在 NumPy 数组基础上的多平台数据可视化程序库,最初被设计用于完善 SciPy 的生态环境。
二、基本原理
在任何绘图之前,我们需要一个Figure对象, figure 相当于绘画用的画板,而 axes/subplot 则相当于铺在画板上的画布。我们将图像绘制在画布上.而axes和subplot的用法有所不同下面开始介绍。
三、主要用法
1.axes
说明:
这个函数的默认配置是创建一个标准的坐标轴,填满整张图。它还有一个可选参数,由图形坐标系统的四个值构成。这四个值分别表示图形坐标系统的 [bottom, left, width, height](底坐标、左坐标、宽度、高度)数值的取值范围是左下角(原点)为 0,右上角为 1。
用法一:
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20) #生成数据
fig=plt.figure() #新建画板
ax1=plt.axes() #默认坐标系
ax2=plt.axes([0.65,0.65,0.2,0.2])
ax1.plot(x,-x**2)
ax2.plot(x,x**3)
结果:
注释:
首先将 x 与 y 设置为 0.65(就是坐标轴原点 位于图形高度 65% 和宽度 65% 的位置),然后将 x 与 y 扩展到 0.2(也就是将坐标轴的宽 度与高度设置为图形的 20%)
用法二:
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20) #生成数据
fig=plt.figure() #新建画板
ax1=fig.add_axes([0.1,0.1,0.8,0.8]) #新建画布
ax2=fig.add_axes([0.2,0.5,0.4,0.3])
x=np.linspace(0,10)
ax1.plot(x,x**2)
ax2.plot(x,x**3)
结果:
这个是使用了add_axes()方法
快速了解 np.linspace()
通过定义均匀间隔创建数值序列。其实,需要指定间隔起始点、终止端,以及指定分隔值总数(包括起始点和终止点);最终函数返回间隔类均匀分布的数值序列
np.linspace(start = 0, stop = 100, num = 5)
则返回
结果如下:array([ 0., 25., 50., 75., 100.])
2. Subplot
说明:
若干彼此对齐的行列子图是常见的可视化任务, plt.subplot() 在一个网格中创建一个子图。这个命令有三个整型参数——将要创建的网格子图行数、列数和索引值,索引值从 1 开始,从左上角到 右下角依次增大。
用法一:
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20) #生成数据
fig=plt.figure() #新建画板
plt.subplot(2,2,1) #(行、列、子图编号)
plt.plot(x,x)
plt.subplot(2,2,2)
plt.plot(x,2*x)
plt.subplot(2,2,3)
plt.plot(x,x**2)
plt.subplot(2,2,4)
plt.plot(x,x**3)
结果:
注释:生成2行2列4个图形,编号分别为1,2,3,4.
用法二
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20) #生成数据
fig=plt.figure() #新建画板
ax1=fig.add_subplot(1,2,1) #新建画布(行、列、子图编号)
ax2=fig.add_subplot(1,2,2)
ax1.plot(x,np.sin(x))
ax2.plot(x,np.cos(x))
结果:
注释:
这个是使用了add_subplot()方法
如图是建立1行2列的2个图形,索引分别为1和2.
用法三:
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20) #生成数据
fig=plt.figure()
fig,axes=plt.subplots(1,2) #(行、列)
axes[0].plot(x,x**2)
axes[1].plot(x,x**3)
结果:
注释:
生成1行2列2个图形.
3. axis
axis在英文里是坐标轴的意思,通过传入[xmin, xmax, ymin, ymax] 对应的值,plt.axis() 方法可以让你用一行代码设置 x 和 y 的限值,它还可以按照图形的内容自动收紧坐标轴,不留空白区域 .
用法一:
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20)
plt.plot(x,np.sin(x))
plt.axis([-1,11,-1.5,1.5])
结果:
注释:本次设置了x和y的限值。
用法二:
代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20)
plt.plot(x,np.sin(x))
plt.axis("tight")
结果:
注释:本次使图形内容自动收紧坐标轴。