前言
学习笔记。
结合实例解析代码。
一、案例-01-函数图像间隙填充
1.1、代码
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
# 构造x坐标
x = np.arange(0.0, 2, 0.01)
# 构造y1曲线的y坐标
y1 = np.sin(2 * np.pi * x)
# 构造y2曲线的y坐标
y2 = 0.8 * np.sin(4 * np.pi * x)
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))
# 参数y2 默认值为0
ax1.fill_between(x, y1)
ax1.set_title('填充y1与0之间的区域')
# 参数y2 的值为标量1
ax2.fill_between(x, y1, 1)
ax2.set_title('填充y1与0之间的区域')
ax3.fill_between(x, y1, y2)
ax3.set_title('填充y1与y2之间的区域')
ax3.set_xlabel('x')
plt.show()
1.2、分析
1.2.1、plt.rcParams
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
可以初步的认为这仅仅只是一个常规设置,方便更好的设计函数图片。
内里的设置可以不考虑。
资源:
1.2.2、plt.subplots
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))
资源:
1.2.3、plt.figure
资源:
1.2.3.1、figure语法
(1)figure语法说明
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
num
:图像编号或名称,数字为编号 ,字符串为名称figsize
:指定figure的宽和高,单位为英寸;dpi
:参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张facecolor
:背景颜色edgecolor
:边框颜色frameon
:是否显示边框
matpltlib.pyplot.figure(
num = None, # 设定figure名称。系统默认按数字升序命名的figure_num(透视表输出窗口)e.g. “figure1”。可自行设定figure名称,名称或是INT,或是str类型;
figsize=None, # 设定figure尺寸。系统默认命令是rcParams["figure.fig.size"] = [6.4, 4.8],即figure长宽为6.4 * 4.8;
dpi=None, # 设定figure像素密度。系统默命令是rcParams["sigure.dpi"] = 100;
facecolor=None, # 设定figure背景色。系统默认命令是rcParams["figure.facecolor"] = 'w',即白色white;
edgecolor=None, frameon=True, # 设定要不要绘制轮廓&轮廓颜色。系统默认绘制轮廓,轮廓染色rcParams["figure.edgecolor"]='w',即白色white;
FigureClass=<class 'matplotlib.figure.Figure'>, # 设定使不使用一个figure模板。系统默认不使用;
clear=False, # 设定当同名figure存在时,是否替换它。系统默认False,即不替换。
**kwargs)
1.2.3.1、figure例子
例子1——figsize
,facecolor
import matplotlib.pyplot as plt
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
#创建自定义图像
fig=plt.figure(figsize=(4,3),facecolor='blue')
plt.show()
例子2——num
fig=plt.figure(num='图一',figsize=(4,3),facecolor='blue')
1.2.4、np.arange()函数
资源:
1.2.5、fill_between()函数
资源:
fill_between函数
fill_between
函数的签名为:matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)
参数说明如下:
x
:定义两条曲线的节点的x坐标。长度为N的类数组结构。必备参数。y1
:定义曲线的节点的y坐标。长度为N的类数组结构或者标量。必备参数。y2
:定义第2条曲线的节点的y坐标。长度为N的类数组结构或者标量,默认值为0。可选参数。where
:根据条件排除一些填充区域。长度为N的布尔数组。默认值为None
。可选参数。interpolate
:当该属性为True
时将计算实际交点,并将填充区域延伸到此点。布尔值。默认值为False
。注意:该属性只有使用了where
属性且两条曲线相互交叉时才生效。step
:拐点的计算方式。字符串,取值范围为{'pre', 'post', 'mid'}
。默认值为None
。可选参数。**kwargs
:PolyCollection
对象的相关属性。fill_between
函数的返回值为PolyCollection
对象。
注意事项: 建议
x
,y1
,y2
使用数组结构,这样where
参数的应用更加灵活。
两条曲线分别由(x,y1)
和(x,y2)
定义。两条曲线具有相同的x
坐标。 两个曲线之间的填充区域可能有多个。
通过where
参数可以排除一些填充区域。 默认直接连接给定点构成曲线。可以使用step函数改变连接点。
二、案例-02-置信带
2.1、代码
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
x = np.linspace(0, 10, 11)
y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1, 9.9, 13.9, 15.1, 12.5]
# 拟合曲线,并估计其y值及误差。
a, b = np.polyfit(x, y, deg=1)
y_est = a * x + b
y_err = x.std() * np.sqrt(1/len(x) +
(x - x.mean())**2 / np.sum((x - x.mean())**2))
# 绘制拟合线
plt.plot(x, y_est, '-')
# 填充置信带
plt.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
# 绘制数据点
plt.plot(x, y, 'o', color='tab:brown')
plt.show()
2.2、分析
2.2.1、np.linspace()函数
资源:
np.linspace(start = 0, stop = 100, num = 5)
代码生成 NumPy 数组 (ndarray 对象),结果如下:array([ 0., 25., 50., 75., 100.])
2.2.2、np.polyfit()函数
Numpy的
polyfit()
函数是一个用于多项式拟合的工具。它可以根据一组给定的数据点以及多项式的阶数,计算出最小二乘意义下的多项式拟合系数。
资料:
多项式拟合一般方程法详细推导
基本语法
Numpy
的polyfit()
函数有三个参数:
numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
x
:输入的自变量数据,一般是一个有序的一维数组。y
:输入的因变量数据,一般也是一个有序的一维数组。deg
:要拟合的多项式的阶数。
该函数返回一个一维数组,包含多项式拟合系数,从高到低依次排列。
例子
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 20)
y = np.sin(x)
# 对这组数据进行三次多项式拟合
p = np.polyfit(x, y, 2)
print("y=",y)
print("p=",p)
2.2.3、std()函数
std()
常用于机器学习中的标准化数据操作,可用于计算给定数组沿指定轴线的标准差。
其语法如下:
numpy.std(arr, axis=None, dtype=float64)
arr
表示输入的数据,可以是一维数组或二维数组。
axis
表示需要计算标准差的轴。
- axis=0表示沿列计算标准差,
- axis=1表示沿行计算标准差
dtype
表示计算标准差时使用的数据类型
例子-01
#二维数组按列求标准差
import numpy as np
arr = [[1, 2, 3],[1, 2, 3],[1, 2, 3]]
print("二维数组 :", arr)
print("标准差 ", np.std(arr,axis=1))
例子-02
#二维数组按列求标准差
import numpy as np
arr = [[1, 2, 3],[1, 2, 3],[1, 2, 3]]
print("二维数组 :", arr)
print("标准差 ", np.std(arr,axis=0)
2.2.4、sqrt() 函数
sqrt()
方法返回数字x的平方根。语法
sqrt() 方法的语法:python import math math.sqrt( x )
返回值
返回数字x
的平方根。
2.2.5、len()函数
Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。
语法 len()方法语法:
len( s )
参数
s
– 对象。返回值 返回对象长度。
实例
str = "runoob"
print(len(str)) # 字符串长度
l = [1, 2, 3, 4, 5]
print(len(l)) # 列表元素个数
2.2.6、mean()函数
Python statistics.mean() 用于计算给定数据集的算术平均值(均值)。
语法
statistics.mean()
方法语法如下:statistics.mean(data)
参数说明:data
– 包含数值的可迭代对象,例如列表或元组。
返回值 函数计算并返回数据集的算术平均值 作为结果。
实例
import numpy as np
x = np.linspace(0, 10, 11)
print(x.mean())
2.2.7、sum()函数
sum() 方法对序列进行求和计算。
语法 以下是
sum()
方法的语法:sum(iterable[, start])
参数iterable
– 可迭代对象,如:列表、元组、集合。start
– 指定相加的参数,如果没有设置这个值,默认为0。
返回值 返回计算结果。
实例
a=sum([0,1,2])
b=sum((2, 3, 4), 1) # 元组计算总和后再加 1
c=sum([0,1,2,3,4], 2) # 列表计算总和后再加 2
print('a=',a)
print('b=',b)
print('c=',c)
三、案例-03-拟合一组sin函数数据
3.1、代码
import numpy as np
import matplotlib.pyplot as plt
# 创建一组sin函数的数据点
x = np.linspace(-np.pi, np.pi, 20)
y = np.sin(x)
# 对这组数据进行三次多项式拟合
p = np.polyfit(x, y, 3)
# 绘制拟合的多项式曲线
t = np.linspace(-np.pi, np.pi, 100)
plt.plot(x, y, 'bo', label='data')
plt.plot(t, np.polyval(p, t), '-k', label='fit')
plt.legend()
plt.show()
3.2、分析
3.2.1、np.polyval()函数
polyval() 函数的语法如下:
numpy.polyval(p, x)
p
是多项式系数。x
是自变量。
例子
一个一元二次方程
y
=
3
x
2
+
2
x
+
1
y=3x^2+2x+1
y=3x2+2x+1,现在需要求 x 为 2、3、4 时的 y 值。
import numpy as np
# 定义多项式系数
p = [3, 2, 1]
# 定义自变量
x = [2, 3, 4]
# 计算多项式在 x 处的值
y = np.polyval(p, x)
print(y)
在该例子中p
也可以等于np.polyfit(x, y, 3)
,即p = np.polyfit(x, y, 3)