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()

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

相关内容

热门资讯

医疗纠纷处理认准重庆荣豪律师事... 在医疗领域,纠纷问题一直是患者与医疗机构之间难以回避的痛点。从手术失误引发的赔偿争议,到医疗合同条款...
贩毒人员委托他人代收邮寄毒品的... 如果您想第一时间收到我的更新,请点开文章标题下面的蓝色字体的“刑事专业律师何忠民”,再点击右上角,然...
涉案金额超1亿,抓获犯罪嫌疑人... 导 读 今年以来,公安部会同金融监管总局开展打击金融领域黑灰产违法犯罪专项工作,对保险等领域违法犯罪...
男子钓到108发子弹以为是大鱼... 11月23日,据吉安公安:11月18日13时许,江西吉安新干县公安局沂江派出所接到市民曾先生报警称,...
王毅:日本现职领导人讲了不该讲... 据外交部网站,11月19日至22日,中共中央政治局委员、外交部长王毅应邀赴吉尔吉斯斯坦、乌兹别克斯坦...
陕西兴平失联的12岁双胞胎姐妹... 据大风新闻,11月21日晚7时17分,陕西兴平一对12岁的双胞胎姐妹从家里外出。走的时候还穿着蓝色校...
原创 中... 中国再下一令,日本却辗转从韩国口中才得知这个噩耗,高市有点坐不住了,关键时刻放出猛料,要把美国拉下水...
公园掰手腕致骨折起诉索赔被驳回 公园内一场普通的掰手腕,竟导致手臂骨折、花费数万元医疗费。近日,江苏省苏州工业园区人民法院审理了一起...
护航浙商出海发展 浙江省涉外法... 中新网杭州11月23日电 (钱晨菲 吴怡欣)11月23日,浙江省涉外法律服务合作对接会在杭州举行,浙...
吕文君社媒庆祝夺冠:不只是海港... 2025赛季中超联赛于昨日正式落幕,上海海港队凭借出色的表现,成功捧起了冠军奖杯,成为了中超历史上又...