⽤Python绘制数学函数图像
前⾔
最近开始学习数学了,有⼀些题⽬的函数图像⾮常有特点,有⼀些函数图像⼿绘⽐较⿇烦,那么有没有什么办法做出⼜标准⼜好看的数学函数图像呢?
答案是有很多的,有很多不错的软件都能画出函数图像,但是,我想到了Python的数据可视化。Python在近些年⾮常⽕热,在数据分析以及深度学习等⽅⾯得到⼴泛地运⽤,其丰富的库使其功能愈加强⼤。
这⾥我们使⽤Python的NumPy库以及Matplotlib库进⾏绘图。
NumPy与Matplotlib
NumPy(Numerical Python) 是 Python 语⾔的⼀个扩展程序库,⽀持⼤量的维度数组与矩阵运算,此外也针对数组运算提供⼤量的数学函数库。
Matplotlib 是 Python 的绘图库。 它可与 NumPy ⼀起使⽤,提供了⼀种有效的 MatLab 开源替代⽅案。
函数绘图
所需库函数语法
import 语句
想使⽤ Python 源⽂件,只需在另⼀个源⽂件⾥执⾏ import 语句,语法如下:
import module1[, module2[,... moduleN]
from … import 语句
Python 的 from 语句让你从模块中导⼊⼀个指定的部分到当前命名空间中,语法如下:
from modname import name1[, name2[,... nameN]]
numpy.arange
numpy 包中的使⽤ arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
根据 start 与 stop 指定的范围以及 step 设定的步长,⽣成⼀个 ndarray。
参数说明:
参数描述
start起始值,默认为0
用subplot函数stop终⽌值(不包含)
step步长,默认为1
dtype返回ndarray的数据类型,如果没有提供,则会使⽤输⼊数据的类型。
numpy.linspace
numpy.linspace 函数⽤于创建⼀个⼀维数组,数组是⼀个等差数列构成的,格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
参数描述
start序列的起始值
stop序列的终⽌值,如果endpoint为true,该值包含于数列中
num要⽣成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中包含stop值,反之不包含,默认是True。retstep如果为 True 时,⽣成的数组中会显⽰间距,反之不显⽰。
dtype ndarray 的数据类型
导⼊所需模块
import numpy as np
from matplotlib import pyplot as plt
⼀元⼀次函数
# ⼀元⼀次函数图像
x = np.arange(-10,10,0.1)#⽣成等差数组
y =2* x
plt.xlabel('x')
plt.ylabel('y')
plt.title("⼀元⼀次函数")
plt.plot(x, y)
plt.show()
⼀元⼆次函数
# ⼀元⼆次函数图像
x = np.arange(-10,10,0.1)
y = x * x
plt.xlabel('x')
plt.ylabel('y')
plt.title("⼀元⼆次函数")
plt.plot(x, y)
plt.show()
指数函数
# 指数函数
x = np.arange(-10,10,0.1)
y = np.power(2, x)
plt.xlabel('x')
plt.ylabel('y')
plt.title("指数函数")
plt.plot(x, y)
plt.show()
正弦函数
x = np.arange(-3* np.pi,3* np.pi,0.1) y = np.sin(x)
plt.xlabel('x')
plt.ylabel('y')
plt.title("正弦函数")
plt.plot(x, y)
plt.show()
余弦函数
x = np.arange(-3* np.pi,3* np.pi,0.1) y = np.cos(x)
plt.xlabel('x')
plt.ylabel('y')
plt.title("余弦函数")
plt.plot(x, y)
plt.show()
⾼级玩法
from pylab import*
import numpy
figure(figsize=(12,8), dpi=72)
# 创建⼀个新的 1 * 1 的⼦图,接下来的图样绘制在其中的第 1 块(也是唯⼀的⼀块)subplot(1,1,1)
X = np.linspace(-np.pi*2, np.pi*2,2048,endpoint=True)
C,S = np.cos(X), np.sin(X)
# 绘制余弦曲线,使⽤蓝⾊的、连续的、宽度为 1 (像素)的线条
plot(X, C,linewidth=1.5, line,label="正弦")
# 绘制正弦曲线,使⽤绿⾊的、连续的、宽度为 1 (像素)的线条
plot(X, S,linewidth=1.5, line,label="余弦")
legend(loc='upper left')
# 设置横轴的上下限
xlim(-4.5,4.5)
# 设置横轴记号
xticks([-np.pi,-np.pi/2,0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
yticks([-1,0,+1],
[r'$-1$', r'$0$', r'$+1$'])
# 设置纵轴的上下限
ylim(-1.5,1.5)
# 设置纵轴记号
yticks(np.linspace(-1,1,5,endpoint=True))
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
# savefig("sincosin.png",dpi=72) #以72dpi保存图像
# 在屏幕上显⽰
show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论