python莫比乌斯环_如何用Matplotlib 画三维图的示例代码
发布日期:2021-06-25 19:30:09 浏览次数:3 分类:技术文章

本文共 2818 字,大约阅读时间需要 9 分钟。

用Matplotlib画三维图

最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感

三维的线图和散点图

#绘制三角螺旋线

from mpl_toolkits import mplot3d

%matplotlib inline

import matplotlib.pyplot as plt

import numpy as np

ax = plt.axes(projection='3d')

#三维线的数据

zline = np.linspace(0, 15, 1000)

xline = np.sin(zline)

yline = np.cos(zline)

ax.plot3D(xline, yline, zline, 'gray')

# 三维散点的数据

zdata = 15 * np.random.random(100)

xdata = np.sin(zdata) + 0.1 * np.random.randn(100)

ydata = np.cos(zdata) + 0.1 * np.random.randn(100)

ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens')

三维等高线图

def f(x, y):

return np.sin(np.sqrt(x ** 2 + y ** 2))

x = np.linspace(-6,6,30)

y = np.linspace(-6,6,30)

X, Y = np.meshgrid(x, y)

Z = f(X,Y)

fig = plt.figure()

ax = plt.axes(projection='3d')

ax.contour3D(X, Y, Z, 50, cmap='binary')

ax.set_xlabel('x')

ax.set_ylabel('y')

ax.set_zlabel('z')

#调整观察角度和方位角。这里将俯仰角设为60度,把方位角调整为35度

ax.view_init(60, 35)

线框图和全面图

全面图和线框图相似,只不过线框图的每一个面都是由多边形构成。只要增加唉一个配色方案来填充这些多边形,就可以感受到可视化图形表面的拓扑结构了。

#线框图

fig =plt.figure()

ax = plt.axes(projection='3d')

ax.plot_wireframe(X, Y, Z, color='c')

ax.set_title('wireframe')

#曲面图

ax = plt.axes(projection='3d')

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')

ax.set_title('surface')

#使用极坐标可以获得切片的效果

r = np.linspace(0, 6, 20)

theta = np.linspace(-0.9 * np.pi, 0.8 * np.pi, 40)

r, theta = np.meshgrid(r, theta)

X = r * np.sin(theta)

Y = r * np.cos(theta)

Z = f(X, Y)

ax = plt.axes(projection='3d')

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')

曲面三角剖分

在某些应用场景下,上述这些要求均匀采样的网格数据显得太过严格且不太容易实现。这时就可以使用三角剖分部分图形。

theta = 2 * np.pi * np.random.random(1000)

r = 6 * np.random.random(1000)

x = np.ravel(r * np.sin(theta))

y = np.ravel(r * np.cos(theta))

z = f(x, y)

ax = plt.axes(projection='3d')

ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5)

#上图还有许多地方需要修补,这些工作可以由ax.plot_trisurf函数帮助我们完成。它首先找到一组所有点都连接起来的三角形,然后用这些三角形创建曲面

ax = plt.axes(projection='3d')

ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none')

莫比乌斯带(应用曲面三角剖分)

#绘制莫比乌斯带

#由于它是一条二维带,因此需要两个内在维度。theta维度取值范围是0~2pi,宽度维度w取值范围是-1~1

theta = np.linspace(0, 2 * np.pi, 30)

w = np.linspace(-0.25, 0.25, 8)

w, theta = np.meshgrid(w, theta)

phi = 0.5 * theta

#x-y平面内的半径

r = 1 + w * np.cos(phi)

x = np.ravel(r * np.cos(theta))

y = np.ravel(r * np.sin(theta))

z = np.ravel(w * np.sin(phi))

#要画出莫比乌斯带,还必须保证三角部分是正确的。最好的方法是首先用基本参数化方法定义三角部分,然后用Matplotlib将

#这个三角剖分映射到莫比乌斯带的三维空间里

from matplotlib.tri import Triangulation

tri = Triangulation(np.ravel(w), np.ravel(theta))

ax = plt.axes(projection='3d')

ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap='viridis', linewidth=0.2)

ax.set_xlim(-1, 1);ax.set_ylim(-1,1);ax.set_zlim(-1,1)

到此这篇关于如何用Matplotlib 画三维图的示例代码的文章就介绍到这了,更多相关Matplotlib 三维图内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

转载地址:https://blog.csdn.net/weixin_39622901/article/details/111449925 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:秒懂百科python_码小会讲解【字符串】 ——Python学习秘籍
下一篇:python绘制相频特性曲线_详解基于python的图像Gabor变换及特征提取

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月04日 18时38分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章