python绘制对数函数_python绘制对数函数

上一期,我们在探讨性质的时候,我们画了几个非常漂亮的图,这一期,就把画图的python放上来,设对数函数为

其中a>0,且a≠1。对应的指数函数为。现在来分a>1和0

(1) 当0 完整代码# -*- coding: utf-8 -*-

"""

Created on Mon Feb 17 17:32:49 2020

project name:draw_logarithm_figure

@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 logarithm_func(x, a=1/2): #定义指数函数

y=math.log(x, a)

return y

X=np.linspace(0.01, 4, 100) #构造自变量组

Y=[logarithm_func(x) for x in X] #求函数值

ax.plot(X, Y, label=r'$0) #绘制指数函数

ax.scatter(1, 0, color='red')

plt.legend()

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)+1, 0.3)) #标注x轴

ax.annotate(s='y', xy=(0, 1.0), xytext=(-0.2, max(Y)+1)) #标注y轴

plt.xlim(-1, 5) #设置横坐标范围

plt.ylim(-5, 3) #设置纵坐标范围

X_lim=np.arange(int(min(X)), max(X)+1, 1)

ax.set_xticks(X_lim) #设置x轴刻度

Y_lim=np.arange(-3, max(Y)+1, 1)

ax.set_yticks(Y_lim) #设置y轴刻度

ax.annotate(s=r'$y=log_a x$',xy=(1, 1), xytext=(1, 1)) #r'$y=(\frac{1}{2})^x$'效果图

0

(2)当a>1时 完整代码# -*- coding: utf-8 -*-

"""

Created on Mon Feb 17 17:32:49 2020

project name:draw_logarithm_figure

@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 logarithm_func(x, a=2): #定义指数函数

y=math.log(x, a)

return y

X=np.linspace(0.01, 4, 100) #构造自变量组

Y=[logarithm_func(x) for x in X] #求函数值

ax.plot(X, Y, label=r'$a>1$') #绘制指数函数

ax.scatter(1, 0, color='red')

plt.legend()

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)+1, 0.3)) #标注x轴

ax.annotate(s='y', xy=(0, 1.0), xytext=(-0.2, max(Y)+1)) #标注y轴

plt.xlim(-1, 5) #设置横坐标范围

plt.ylim(-5, 3) #设置纵坐标范围

X_lim=np.arange(int(min(X)), max(X)+1, 1)

ax.set_xticks(X_lim) #设置x轴刻度

Y_lim=np.arange(-3, max(Y)+1, 1)

ax.set_yticks(Y_lim) #设置y轴刻度

ax.annotate(s=r'$y=log_a x$',xy=(1, 1), xytext=(1, 1)) #r'$y=(\frac{1}{2})^x$'效果图

a>1 两个代码对比,可以看到,仅改了参数a的初始值和label标签,因为两个函数的定义域和值域是一致的。

对数函数vs指数函数

这两个函数虽然互为反函数,但是定义域和值域不一致,所以需要在定义函数的时候给出不同的自变量取值范围,否则会出现math domain error 。

完整代码# -*- coding: utf-8 -*-

"""

Created on Tue Feb 18 08:49:21 2020

project name:logarithm_vs_exponential

@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 logarithm_func(x, a=2): #定义指数函数

y=math.log(x, a)

return y

def exponential_func(x, a=2): #定义指数函数

y=math.pow(a, x)

return y

X=np.linspace(0.01, 4, 100) #构造自变量组

Y=[logarithm_func(x) for x in X] #求函数值

ax.plot(X, Y, label='对数函数') #绘制指数函数

ax.scatter(1, 0, color='red')

X1=np.linspace(-4, 4, 100)

Y1=[exponential_func(x) for x in X1]

ax.plot(X1, Y1, label='指数函数')

ax.scatter(0, 1, color='red')

ax.plot(X1, X1, color='green', label=r'$y=x$')

plt.legend(loc=2)

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)+1, 0.3)) #标注x轴

ax.annotate(s='y', xy=(0, 1.0), xytext=(-0.2, 5)) #标注y轴

plt.xlim(-5, 5) #设置横坐标范围

plt.ylim(-5, 5) #设置纵坐标范围

X_lim=np.arange(-4, 4, 1)

ax.set_xticks(X_lim) #设置x轴刻度

Y_lim=np.arange(-4, 4, 1)

ax.set_yticks(Y_lim) #设置y轴刻度效果图

a>1

只需要在定义指数函数和对数函数的时候给a赋予不同的参数便可出现不同的形状,下图是a=1/2 时的效果图

0

如果你不会写代码或者还有什么不懂的欢迎来“三行科创”微信公众号留言,同时交流群免费向大家开放,入群讲缘分。 参考文献

1,https://blog.csdn.net/zengbowengood/article/details/104338878

2,https://blog.csdn.net/zengbowengood/article/details/102862072

3,https://blog.csdn.net/zengbowengood/article/details/104360150

4,https://blog.csdn.net/zengbowengood/article/details/104260155

5,https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html

6,https://blog.csdn.net/qq_17528659/article/details/82152530

- - -The end- - -

17521754388

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值