“绘图,让科学生动起来”:Python-matplotlib绘图

在专题一中,我们详细说明了搭建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进行动态模拟绘图,欢迎大家的关注!

重在分享,尊重原创

注:本文所有内容均为原创,如有转载,请注明出处,谢谢!

支持原创,保护原创

内容第一,自愿赞赏

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190106G08KMO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券