python绘制数学函数图形

  • 基本初等函数概念
  • 常数函数
  • 幂函数
  • 指数函数
  • 对数函数
  • 三角函数
  • 反三角函数
  • 完整代码
  • 代码解释

之前用python绘制了笛卡尔直角坐标系,绘制了指数函数,绘制了对数函数,有了这三个基础工作的积累,本期,将研究如何利用python绘制6类基本初等函数。

基本初等函数概念

简单的说基本初等函数是不能再由其他更简单结构的函数通过加减乘除四则运算来结合而成的函数。在数学里,基本初等函数包括幂函数、指数函数、对数函数、三角函数、反三角函数、常数函数一共6类。基本初等函数均是连续函数,前面已经介绍过指数函数和对数函数,现在把6类函数的形状和定义域和值域整理。

常数函数

一般的,形如
y=cy=cy=c
的函数称为常数函数,其中c为任意实数,故常数函数的定义域和值域均为全体实数R。

幂函数

一般地,形如
y=xay=x^ay=xa
的函数称为幂函数,幂函数的定义域和值域均为全体实数R。

指数函数

一般形式
y=axy=a^xy=ax
的函数称为幂函数,其中a>0, a≠1,指数函数的定义域为全体实数R,值域为(0,+∞)。

对数函数

一般形式
y=logaxy=log_a xy=loga​x
的函数称为对数函数,其中a>0, a≠1,指数函数的定义域为(0,+∞),值域为全体实数R。

三角函数

常见的三角函数有

函数类型 函数名称 定义域 值域
y =sin x 正弦函数 R [-1,1]
y =cos x 余弦函数 R [-1,1]
y =tan x 正切函数 {x|x≠(π/2)+kπ,k∈Z} R
y =cot x 余切函数 {x|x≠kπ,k∈Z} R
y =sec x 正割函数 {x|x≠(π/2)+kπ,k∈Z} (-∞,-1 ] ∪ [ 1,+∞)
y =csc x 余割函数 {x|x≠kπ,k∈Z} (-∞,-1 ] ∪ [ 1,+∞)

反三角函数

常见的反三角函数主要有以下 6 个

函数类型 函数名称 定义域 值域
y =arcsin x 反正弦函数 [-1,1] R
y =arccos x 反余弦函数 [-1,1] R
y =arctan x 反正切函数 R {x|x≠(π/2)+kπ,k∈Z}
y =arccot x 反余切函数 R {x|x≠kπ,k∈Z}
y =arcsec x 反正割函数 (-∞,-1 ] ∪ [ 1,+∞) {x|x≠(π/2)+kπ,k∈Z}
y =arccsc x 反余割函数 (-∞,-1 ] ∪ [ 1,+∞) {x|x≠kπ,k∈Z}

完整代码

知道不同函数的定义非常关键,因为这直接决定了我们画图时候的横坐标可取值范围,先把所有典型函数列出来

函数类型 函数名称 定义域 值域 可画
y=c 常数函数 R R Y
y=x^a 幂函数 R R Y
y=a^x 指数函数 R R Y
y=log_a x 对数函数 (0,+∞) R Y
y =sin x 正弦函数 R [-1,1] Y
y =cos x 余弦函数 R [-1,1] Y
y =tan x 正切函数 {x|x≠(π/2)+kπ,k∈Z} R Y
y =cot x 余切函数 {x|x≠kπ,k∈Z} R Y
y =sec x 正割函数 {x|x≠(π/2)+kπ,k∈Z} (-∞,-1 ] ∪ [ 1,+∞) Y
y =csc x 余割函数 {x|x≠kπ,k∈Z} (-∞,-1 ] ∪ [ 1,+∞) Y
y =arcsin x 反正弦函数 [-1,1] R Y
y =arccos x 反余弦函数 [-1,1] R Y
y =arctan x 反正切函数 R {x|x≠(π/2)+kπ,k∈Z} Y
y =arccot x 反余切函数 R {x|x≠kπ,k∈Z} Y
y =arcsec x 反正割函数 (-∞,-1 ] ∪ [ 1,+∞) {x|x≠(π/2)+kπ,k∈Z} N
y =arccsc x 反余割函数 (-∞,-1 ] ∪ [ 1,+∞) {x|x≠kπ,k∈Z} N

我们需要实现的功能是,我们输入一个函数表达式,程序给我们返回该表达式的图像,完整代码如下


# -*- coding: utf-8 -*-
"""
Created on Sun Feb 16 16:10:09 2020
project name:draw_func_figure
@author: 帅帅de三叔
"""
import math #导入绘图模块
import numpy as np #导入数值计算模块
import matplotlib.pyplot as plt #导入绘图模块
plt.rcParams['font.sans-serif']=['SimHei'] #绘图中文
plt.rcParams['axes.unicode_minus']=False #绘图负号
import mpl_toolkits.axisartist as axisartist #导入坐标轴加工模块def elementary_func_draw(X, expr): #定义绘制函数图形的函数,其中x是自变量,y为因变量#X=np.linspace(-10, 10, 100) #自变量Y=list(map(lambda x:eval(expr), X)) fig=plt.figure(figsize=(4, 4)) #新建画布ax=axisartist.Subplot(fig, 111) #使用axisartist.Subplot方法创建一个绘图区对象axfig.add_axes(ax) #将绘图区对象添加到画布中ax.plot(X, Y, label=expr) #绘制函数图形 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坐标轴加箭头plt.xlim(-max(X), max(X)) #设置横坐标范围plt.ylim(-max(Y), max(Y)) #设置纵坐标范围   ax.text(-1.0, max(Y), 'y', fontsize=12) #标注y轴ax.annotate(s='x', xy=(max(X), 0), xycoords='data', xytext=(+0, +5), textcoords='offset points', fontsize=12) #标注x轴plt.legend()plt.show()plt.savefig("func_figure.png")if __name__=="__main__":   expr=input("请输入函数表达式:")if "log" in expr: #画对数函数X=np.linspace(0.001, 10, 100)elif "asin"  in expr: #画反正弦函数X=np.linspace(-1, 1, 100)elif "acos" in expr: #画反余弦函数X=np.linspace(-1, 1, 100)else:X=np.linspace(-10, 10, 100)elementary_func_draw(X, expr)

见证奇迹的时候到了

当我输入

2

便会画出如下图

当我输入

x**2

便会画出如下图

当我输入

2**x

便会画出如下图

当我输入

math.log(x, 2)

便会画出如下图

当我输入

math.log10(x)

便会画出如下图

当我输入

math.log(x)

便会画出如下图

当我输入

math.sin(x)

便会画出如下图

当我输入

math.cos(x)

便会画出如下图

当我输入

math.tan(x)

便会画出如下图


当我输入

1/math.tan(x)

便会画出如下图

当我输入

1/math.cos(x)

便会画出如下图

当我输入

1/math.sin(x)

便会画出如下图

当我输入

math.asin(x)

便会画出如下图


当我输入

math.acos(x)

便会画出如下图

当我输入

math.atan(x)

便会画出如下图

当我输入

math.pi/2-math.atan(x)

便会画出如下图


当我输入

arcsec(x)

糟糕,不出图

当我输入

arccsc(x)

糟糕,不出图

这两个函数还有待后面解决,或许通过三角函数关系式,或者重新定义这两个函数,如果你又什么好办法,欢迎留言。

代码解释

这里重点解释一下在给两个坐标轴打标签时候的处理方法

ax.text(-1.0, max(Y), 'y', fontsize=12) #标注y轴
ax.annotate(s='x', xy=(max(X), 0), xycoords='data', xytext=(+0, +5), textcoords='offset points', fontsize=12) #标注x轴
  • 在对y轴标注的时候,位置的横向,我们选定了一个定值 -1.0 ,纵向选择Y的最大值,因为横向是定下来的,从-10到10,故只需要在Y轴稍微偏左一点即可,而纵向是随着横向变化而变化的,最大莫过于max(Y),故取其最大值。
  • 在对x轴标注的时候,我们不在用到text()函数,改用annotate()函数,因为这个函数更为灵活

其中

  1. s=‘x’ 表示要标注的内容;
  2. xy=(max(X), 0)是为标注设置一个参照点(max(X), 0),即横坐标的最右端;
  3. xycoords=‘data’ 表示参照点的单位是一个值的形式;
  4. xytext=(+0, +5)表示标注文本的偏移量,是相对于参照点的偏移量;
  5. textcoords=‘offset points’表示注释文本的坐标系属性,表示以点为单位,也可以是pixels,表示以像素为单位,还可以是xycoords的属性值

因为选定了横坐标最右端为参照点,再加上偏移量,任你y轴怎么变化,这个标注会老老实实呆在那个离(max(X), 0)不远处。

最后贴出math模块下的标准C写的数学函数

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

参考文献
1,基本初等函数
2,反余切函数
2,math模块

python绘制基本初等函数(一)相关推荐

  1. 使用python绘制基本初等函数

    文章目录 使用python绘制基本初等函数 幂函数 指数函数 对数函数 三角函数 反三角函数 使用python绘制基本初等函数 基本初等函数{幂函数:xa,指数函数:ax(a>0,a≠1)对数函 ...

  2. python中arcsec_python绘制基本初等函数图像

    之前用python绘制了笛卡尔直角坐标系,绘制了指数函数,绘制了对数函数,有了这三个基础工作的积累,本期,将研究如何利用python把六类基本初等函数一劳永逸的绘制出来. 基本初等函数概念 简单的说基 ...

  3. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  4. python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码

    通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...

  5. python绘制所有特征的密度图(density plot)

    python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...

  6. python绘制影像组学训练集、测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图)

    python绘制影像组学训练集.测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图) # 所有数据的瀑布图 tagets_all = df['label'] tagets_all = df. ...

  7. 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)

    来源:大数据DT 本文约5400字,建议阅读10分钟 本文为你介绍数据分析时经常用到的折线图,可以用来呈现哪些数据关系?在数据分析过程中可以解决哪些问题?怎样用Python绘制折线图? 01 概述 折 ...

  8. 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?(附代码)

    来源:大数据DT(ID:hzdashuju) 作者:屈希峰,资深Python工程师,知乎多个专栏作者 本文约8000字,建议阅读20分钟 柱状图是当前应用最广泛的图表之一,你几乎每天都可以在电子产品上 ...

  9. 层次聚类python_用python绘制层次聚类图

    层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...

最新文章

  1. mysql 备份库的shell_MySQL数据库的shell脚本自动备份
  2. java类结构图_java 集合类结构图
  3. [数据结构]Map和Set
  4. android 如何使用aar,Android Studio如何使用aar依赖包?
  5. 怎么查看数据库服务器型号,如何查看服务器数据库类型
  6. 乐高创意机器人moc_乐高MOC作品欣赏:变形金刚及其他
  7. Android Webview实现文件下载功能
  8. python表白小程序(1)源码下载
  9. 用Java实现HTTP文件队列下载
  10. fdisk添加分区引起的Linux Error: 22: Invalid argument
  11. 下载网页中内嵌的PDF
  12. 哪种编程语言好?大神为你分析 Go、Java、C、C++ 等主流编程语言
  13. 用bootstrap实现的,三种风格的登录界面网页源码
  14. 欧文分校计算机新sat多少分录取,新SAT多少分能进美国TOP100大学
  15. win7 x64部署和串口调试虚拟驱动toaster
  16. 小布老师oracle,小布老师-oracle-1
  17. 云免流usb共享电脑_云免流usb共享电脑
  18. 基于k-means聚类算法对NBA球员数据的一次聚类分析
  19. GBase 8c V5 主备式部署实操
  20. 六、python Django REST framework数据格式处理[序列化]

热门文章

  1. 加入 Elastic 贡献者计划的 5 个理由
  2. MUI浮动屏幕,苹果5s,苹果6s地址列表页面不显示
  3. 自定义Gallery实现QQ附近的人和京东金融选择存款时间效果
  4. Error resolving template [commodity/getCommodityList], template might not exist or might not be acce
  5. 2023年全国职业院校技能大赛 网络系统管理国赛规程 正式版!
  6. Three.JS提升学习4:几何体对象组合
  7. smark的简单介绍
  8. 基于Docker构建-NET持续集成环境
  9. ossec支持mysql数据库_OSSEC 加固linux系统详细配置
  10. JAVA使用poi解析execl解决数值被转为科学计数法(如:手机号、身份证号、电话、等)解决方法