在专题一中,我们详细说明了搭建python-matplotlib绘图平台的四个要素,还记得吗?
它们是:python软件主体;pip库管理工具;matplotlib绘图库;文本编辑器。
在这一专题中,我们将介绍多元函数的3D图形化和拟合。在理学和工学工作中,或在数学教学中,人们总会遇到多种多样的函数,其中以X,Y,Z为自(因)变量的多元函数占很大一部分,如何让函数图形化呢?我们运用matplotlib就可以实现,以下是几种多元函数的3D图形化:
Z=X^2-Y^2
Z=(X-Y)^2
在分析化学中,经常会遇到多元组分对总浓度值的影响,我们可利用matplotlib将其图形化,从而分析多元组分浓度分布Z=0.5X^2+2Y-1.5(示例)
Z=sin(sqrt(X^2+Y^2))
在数学教学中,使用matplotlib库,即可以让孩子直观认识抛物线Z=X^2,也可以学习编程,一举两得
我们需要着手设计程序,可实现的功能为:
允许用户输入x,y轴长度值,x和y的次方数(整数),x,y,z轴和主标题的标签名称(英文)。
最终效果:生成3D视图,并分别在xy,xz,yz的平面上生成等高线图。
在图形显示窗口,我们可以通过鼠标操作改变视角,缩放图形,也可保存视图。
主程序代码如下:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax=Axes3D(fig)
print("Welcometo use 3D graphic generator, the formula model is z=sqrt(x^n1+y^n2).\n")
a1=input("pleaseenter x axis length value(x),actual display range is from - x to x:\n")
a1=float(a1)
print("Thex axis actual display range is from - "+str(a1)+" to"+str(a1)+":\n")
a2=input("pleaseenter y axis length value(y),actual display range is from - y to y:\n")
a2=float(a2)
print("They axis actual display range is from - "+str(a2)+" to"+str(a2)+":\n")
a3=input("pleaseenter n power number of x value:(please enter an integer)\n")
a3=int(a3)
print("The power number of x value is "+str(a3)+".\n")
a4=input("pleaseenter n power number of y value:(please enter an integer)\n")
a4=int(a4)
print("Thepower number of y value is "+str(a4)+".\n")
X=np.arange(-a1,a1,0.5)
Y=np.arange(-a2,a2,0.5)
X,Y=np.meshgrid(X,Y)
Z=np.sqrt(X**a3+Y**a4)
x1=input("pleaseenter x label name:\n")
x2=input("pleaseenter y label name:\n")
x3=input("pleaseenter z label name:\n")
x4=input("pleaseenter title label name:\n")
ax.set_xlabel(x1,fontsize=20)
ax.set_ylabel(x2,fontsize=20)
ax.set_zlabel(x3,fontsize=20)
ax.set_title(x4,fontsize=25)
ax.view_init(30,35)
b1=a1+4
b2=a2+4
ax.set_xlim(-b1,b1)
ax.set_ylim(-b2,b2)
ax.set_zlim(-8,8)
plt.show()
该程序主要步骤解析为:
1. 分别导入3个库,以实现基本函数,matplotlib绘图以及3D做图功能:(进行三维绘图时,最后一个库的导入必不可少,若进行二维绘图,只导入前两个库即可)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
2.通过输入设定x,y的坐标范围,并生成网格,如下:
其中a1,a2分别代表X,Y坐标的选值范围,0.5代表单个网格的跨度,越小,曲面越平滑
X=np.arange(-a1,a1,0.5)
Y=np.arange(-a2,a2,0.5)
X,Y=np.meshgrid(X,Y)
3.构建Z关于X和Y的方程,示例如下(可做很多变换):
Z=np.sqrt(X**a3+Y**a4)
又例如:
#注释:X的多次方和Y的多次方之和开根号的正弦值
R=np.sqrt(X**a3+Y**a4)
Z=np.sin(R)
#注释:X的多次方和Y的多次方之差开根号的余弦值
R=np.sqrt(X**a3-Y**a4)
Z=np.cos(R)
#注释:以e为底的(X的多次方和Y的多次方之差开根号)次方
R=np.sqrt(X**a3-Y**a4)
Z=np.exp(R)
注:a3,a4可在程序中进行输入
#注释:X平方与Y平方之和
Z=X^2+Y^2
#注释:多元组分
多元组分浓度分布Z=0.5X^2+2Y-1.5
4.创建关于x,y,z的3D视图,x,y轴步长均为2,透明度为0.5,彩虹色渐变,如下:
5.创建该3D视图在xy,xz,yz平面的投影图,并选择投影的坐标面位置,hot色渐变,如下:
6.设定xyz轴的显示范围,如下:
ax.set_xlim(-b1,b1)
ax.set_ylim(-b2,b2)
ax.set_zlim(-8,8)
7.最终生成画图:
plt.show()
当然,对于函数主体,我们也可以加入重复绘图的命令:
在导入各种库的命令之后,加入(这里不需要首行缩进)
while True:
结尾处加入(注意全部需要首行缩进,break在if语句后进行首行缩进)
keep_testing=input("continuepainting?")
if keep_testing=='n':
break
中间的全部命令也要首行缩进
这样就可以在图形关闭后,系统会自动提示是否再次画图,按n后结束程序
讲到这里,本期的内容就告一段落了,脚本编辑是开放式设计,可以进行很多改造,让程序段更完善。在下一专题中,我们将运用python-matplotlib进行动态模拟绘图,欢迎大家的关注!
重在分享,尊重原创
注:本文所有内容均为原创,如有转载,请注明出处,谢谢!
支持原创,保护原创
内容第一,自愿赞赏
领取专属 10元无门槛券
私享最新 技术干货