Python科学计算:多维绘图2
创始人
2025-05-28 01:58:29
0

书上的代码有些问题,一直输出的是白的。啥都没有,我还在找原因,找到之后,会在评论区里面说的:

主要就是两个包:Axes3D、mayavi,但是,很奇妙的事情就是,跟着书上写的,你压根就没有东西输出出来,书上展示了两个文件,分别用Axes3D和mayavi的mlab绘图,但是,绘出的都是白色PDF,简称就是,啥都没有,就很离谱,虽然我已经把之前的全部给注释掉了,但是,Python为什么还会去执行已经注释掉的文件嘞?这俩个问题已经解决辽,在后面。

举例子:我的代码是

import numpy as np
xx,yy=np.mgrid[-2:2:81j,-3:3:91j]
zz=np.exp(-2*xx**2-yy**2)*np.cos(2*xx)*np.cos(3*yy)
from mayavi import mlab
fig=mlab.figure()
s=mlab.surf(xx,yy,zz,representation='wireframe')
ax=mlab.axes(line_width=2,nb_labels=0.4)
mlab.show()

但是,他的输出是我们上次课上讲的四面子图的绘制(这个问题已经解决了,python文件的路径有问题,改了就没事了):

图一:问题绘图

但是,在网上找的代码又是可以完全运行的,这让我不由得想起了一句话,完溜,被骗溜。。。

为什么嘞???代码基本上是一致的呀!!!

啊哈哈哈,我找到原因啦:

在这一行:

fig=plt.figure()
ax=fig.add_subplot(1,1,1, projection='3d')

上面的这种写法是正确的,你要是按照下面书上的这种写法,那根本输出不了:

fig=plt.figure()
ax=Axes3D(fig)

第二行代码要是和上面一样的话,你根本输出不了,这下看看我修改之后对的代码:

import numpy as np
[u,v]=np.mgrid[-1:2:51j,-2:2:61j]
x,y,z=u*(1-u**2/3+v**2),v*(1-v**2/3+u**2),u**2-v**2
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# plt.ion()
fig=plt.figure()
ax=fig.add_subplot(1,1,1, projection='3d')
ax.plot_surface(x.T,y.T,z.T,)#rstride=2,cstride=2,color='r',alpha=0.2,linewidth=0.5
ax.elev,ax.azim=50,-80
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
plt.show()

图二:修改之后的代码

import numpy as np
xx,yy=np.mgrid[-2:2:81j,-3:3:91j]
zz=np.exp(-2*xx**2-yy**2)*np.cos(2*xx)*np.cos(3*yy)
# # from mayavi import mlab
# # fig=mlab.figure()
# # s=mlab.surf(xx,yy,zz,representation='wireframe')
# # ax=mlab.axes(line_width=2,nb_labels=0.4)
# # mlab.show()
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# plt.ion()
fig=plt.figure()
ax=fig.add_subplot(1,1,1, projection='3d')
ax.plot_surface(xx,yy,zz,rstride=4,cstride=3,color='r',alpha=0.9)
ax.contour(xx,yy,zz,zdir='x',offset=-3.0,colors='black')
ax.contour(xx,yy,zz,zdir='y',offset=4.0,colors='blue')
ax.contour(xx,yy,zz,zdir='z',offset=-2.0)
ax.set_xlim3d(-3.0,2.0)
ax.set_ylim3d(-3.0,4.0)
ax.set_zlim3d(-2.0,1.0)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

记住,如果用

plt.ion()
fig.show()

这两行代码的话,你的输出图像会一闪而过,很尴尬,当然,我之前的一篇博客里面也提到了一种解决方案,可以尝试着使用,来看看做出来的结果:

图三

图四

okok,解决了一个心头大患,再来解决mayavi:我现在严重怀疑我的mayavi'没有安装成功,重新试着安装一下看看:

。。。,mayavi安装失败。。。

图五:安装失败

cmd安装不成功,但是,powershell安装成功辽!!!

但是,不得不说,mayavi做出的图片就是漂亮。

安装很慢,待会再跟着书上的,用mlab可视化Enneper曲面:但是,还是不知道为什么,mayavi没法子启动,mayavi的安装,给大家推荐一个博客,很详实:mayavi安装的问题_linyanhao0104的博客-CSDN博客

这会先试着用mplot3D画一下居里叶集,书上使用mayavi画的,我觉着,我们可以试下mplot3d:

import numpy as np
x,y=np.ogrid[-1.5:0.5:1000j,-1.0:1.0:1000j]
z=x+1j*y
julia=np.zeros(z.shape)
c=-0.7-0.4jfor i in range(1,101):z=z**2+cescape=z*z.conj()>4julia+=(1/float(i))*escapeimport matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax=fig.add_subplot(1,1,1, projection='3d')
ax.plot_surface(x,y,julia)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

这是mplot3d输出的julia集的图像:

图六:julia集(1)

图七:julia集(2)

这是没有调色的结果,所以你看起来不太好看,我再试试看能不能用mayavi做出来,

啊哈哈,才发现是我的问题,,我的路径可能有问题,python一直在运行另外一个文件,就是前天绘图的那个,然后,我重新修改了一下,这下mayavi绘图完美,好漂亮啊:

图八:julia集(mlab版本(1))

图九:julia集(mlab版本2)

代码也很简单:

from mayavi import mlab
mlab.figure(size=(800,600))
mlab.surf(julia,colormap="gist_ncar",warp_scale='auto',vmax=1.5)
mlab.view(15,30,500,[-0.5,-0.5,2.0])
mlab.show()

解决了两个问题,今天收获满满啊,看来书上的只能说是借鉴,实际操作的时候,还得多看博客。

相关内容

热门资讯

新手复现STANet代码详解S... STANet/options/base_options.pyBaseOptions.pyinitia...
【碎片化知识总结】三月第二周 目录 1、如何给IDEA设置炫酷的背景图片? 2、使用Python执行sql脚本 3、...
C++复习笔记23       RAII(Resource Acquisition Is Initiali...
Baumer工业相机堡盟相机如... 项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场...
富裕县:为企业配备总法律顾问 来源:齐齐哈尔市委宣传部 近日,富裕县为企业配备总法律顾问,并以“点单式”服务方式随时为企业提供专业...
DataEye海外微短剧热榜:... 文 | DataEye 一、DataEye海外微短剧热榜 本期(5月19日-5月25日)Data...
Unity Lighting ... Unity中反射光照是如何工作的         先来看个案例问题,下图中࿰...
Python-04:函数进阶 文章目录一、多返回值二、函数传参2.1 位置参数2.2 关键字参数2.3 缺省参数(默...
VS Code配置go编译调试... 一、实验要求         选用go或rust编写menu项目,创建一个版本库&#x...
北京新版中轴线保护法规通过 观点网讯:5月30日,北京市十六届人大常委会第十七次会议审议通过了《北京中轴线世界文化遗产保护条例》...