上一期,我们介绍了指数函数的形和质以及运算法则,其中有两个非常漂亮的指数函数图就是用python的matplotlib画出来的。这一期,我们将要介绍如何利用python绘制出如下指数函数。
图 1 a>1
我们知道当0 ,指数函数 是单调递减的,当a>1 时,指数函数是单调递增的。所以我们首先要定义出指数函数,将a值做不同初始化
import math
…
def exponential_func(x, a): #定义指数函数
y=math.pow(a, x)
return y
然后,利用numpy构造出自变量,利用上面定义的指数函数来计算出因变量
X=np.linspace(-4, 4, 40) #构造自变量组
Y=[exponential_func(x) for x in X] #求函数值
有了自变量和因变量的一些散点,那么就可以模拟我们平时画函数操作——描点绘图,利用下面代码就可以实现
import math
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist #导入坐标轴加工模块
plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
plt.rcParams[‘axes.unicode_minus’]=False
fig=plt.figure(figsize=(6,4)) #新建画布
ax=axisartist.Subplot(fig,111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax) #将绘图区对象添加到画布中
def exponential_func(x, a=2): #定义指数函数
y=math.pow(a, x)
return y
X=np.linspace(-4, 4, 40) #构造自变量组
Y=[exponential_func(x) for x in X] #求函数值
ax.plot(X, Y) #绘制指数函数
plt.show()
图 2 a=2
图2虽简单,但麻雀虽小五脏俱全,指数函数该有都有,接下来是如何让其看起来像我们在作图纸上面画的那么美观,这里重点介绍axisartist 坐标轴加工类,在的时候我们已经用过了,这里就不再多说了。我们只需要在上面代码后面加上一些代码来将坐标轴好好打扮一番。
图 3 a>1 完整代码# -*- coding: utf-8 -*-
“””
Created on Sun Feb 16 10:19:23 2020
project name:
@author: 帅帅de三叔
“””
import math
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist #导入坐标轴加工模块
plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
plt.rcParams[‘axes.unicode_minus’]=False
fig=plt.figure(figsize=(6,4)) #新建画布
ax=axisartist.Subplot(fig,111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax) #将绘图区对象添加到画布中
def exponential_func(x, a=2): #定义指数函数
y=math.pow(a, x)
return y
X=np.linspace(-4, 4, 40) #构造自变量组
Y=[exponential_func(x) for x in X] #求函数值
ax.plot(X, Y) #绘制指数函数
plt.show()
# 从此处开始打扮
print(max(X), max(Y)) #测试一下自变量最大值和因变量最大值,为后面的坐标轴设置依据
ax.axis[:].set_visible(False) #隐藏原来的实线矩形
ax.axis[“x”]=ax.new_floating_axis(0, 0, axis_direction=”bottom”) #添加x轴
ax.axis[“y”]=ax.new_floating_axis(1, 0, axis_direction=”bottom”) #添加y轴
ax.axis[“x”].set_axisline_style(“-|>”, size=1.0) #给x坐标轴加箭头
ax.axis[“y”].set_axisline_style(“-|>”, size=1.0) #给y坐标轴加箭头
ax.annotate(s=’x’, xy=(max(X), 0), xytext=(max(X)+0.5, 0.5)) #标注x轴
ax.annotate(s=’y’, xy=(0, 1.0), xytext=(-0.5, max(Y)+0.5)) #标注y轴
plt.xlim(-4, 5) #设置横坐标范围
plt.ylim(-1, 17) #设置纵坐标范围
X_lim=np.arange(min(X), max(X)+1, 1)
ax.set_xticks(X_lim) #设置x轴刻度
Y_lim=np.arange(0, max(Y)+1, 1)
ax.set_yticks(Y_lim) #设置y轴刻度
ax.annotate(s=r’$y=a^x$’,xy=(3, 10), xytext=(3, 10))
整个代码难度不大只是比较注重细节,如果你要画成减函数,只需要将a的初始值设置到(0,1)之间的某个值即可。比如定义新的指数函数
相应的代码改如下修改便是
def exponential_func(x, a=1/2): #定义指数函数
y=math.pow(a, x)
return y
便会画出如下指数函数图
图 3 a<1
参考文献
1,https://blog.csdn.net/zengbowengood/article/details/102862072
2,https://blog.csdn.net/zengbowengood/article/details/104260155
3,https://editor.csdn.net/md/?articleId=104338878
– – -The end- – –
17521754388