[Python] 三维散点/曲线/曲面 ( 含有笔记、代码、注释 ) 您所在的位置:网站首页 铅笔盒平面图怎么画 [Python] 三维散点/曲线/曲面 ( 含有笔记、代码、注释 )

[Python] 三维散点/曲线/曲面 ( 含有笔记、代码、注释 )

2024-04-21 23:52| 来源: 网络整理| 查看: 265

3D散点import matplotlib as mpl import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np xs1 = np.random.randint(30,40,100) ys1 = np.random.randint(20,30,100) zs1 = np.random.randint(10,20,100) xs2 = np.random.randint(50,60,100) ys2 = np.random.randint(30,40,100) zs2 = np.random.randint(50,70,100) xs3 = np.random.randint(10,30,100) ys3 = np.random.randint(40,50,100) zs3 = np.random.randint(40,50,100) # 方式1:设置三维图形模式 fig = plt.figure() # 创建一个画布figure,然后在这个画布上加各种元素。 ax = Axes3D(fig) # 将画布作用于 Axes3D 对象上。 ax.scatter(xs1,ys1,zs1) # 画出(xs1,ys1,zs1)的散点图。 ax.scatter(xs2,ys2,zs2,c='r',marker='^') ax.scatter(xs3,ys3,zs3,c='g',marker='*') ax.set_xlabel('X label') # 画出坐标轴 ax.set_ylabel('Y label') ax.set_zlabel('Z label') plt.show()3D曲线import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 设置图例字号 mpl.rcParams['legend.fontsize'] = 10 # 方式2:设置三维图形模式 fig = plt.figure() ax = fig.gca(projection='3d') # 测试数据 theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) z = np.linspace(-4, 4, 100) / 4 r = z**3 + 1 x = r * np.sin(theta) y = r * np.cos(theta) # 绘制图形 ax.plot(x, y, z, label='parametric curve') # 显示图例 ax.legend() # 显示图形 plt.show()3D曲线拟合(含噪音)# 不含噪声散点图 import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 设置图例字号 mpl.rcParams['legend.fontsize'] = 10 # 方式2:设置三维图形模式 fig = plt.figure() ax = fig.gca(projection='3d') # 测试数据 x = np.linspace(-4 * np.pi, 4 * np.pi, 30) y = x z = x * x ax.scatter(x,y,z) # 画出(x,y,z)的散点图。

运行结果:

# 不含噪声曲线图 import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 设置图例字号 mpl.rcParams['legend.fontsize'] = 10 # 方式2:设置三维图形模式 fig = plt.figure() ax = fig.gca(projection='3d') # 测试数据 x = np.linspace(-4 * np.pi, 4 * np.pi, 30) y = x z = x * x # 绘制图形 ax.plot(x, y, z, label='parametric curve') # 显示图例 ax.legend() # 显示图形 plt.show()# 含噪声散点图 import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 设置图例字号 mpl.rcParams['legend.fontsize'] = 10 # 方式2:设置三维图形模式 fig = plt.figure() ax = fig.gca(projection='3d') # 测试数据 x = np.linspace(-4 * np.pi, 4 * np.pi, 30) y = x + np.random.randn(y.shape[-1]) * 2.5 z = x * x ax.scatter(x,y,z) # 画出(x,y,z)的散点图。

运行结果:

# 含噪声曲线图 import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 设置图例字号 mpl.rcParams['legend.fontsize'] = 10 # 方式2:设置三维图形模式 fig = plt.figure() ax = fig.gca(projection='3d') # 测试数据 x = np.linspace(-4 * np.pi, 4 * np.pi, 30) y = x + np.random.randn(x.shape[-1]) * 2.5 z = x * x # 绘制图形 ax.plot(x, y, z, label='parametric curve') # 显示图例 ax.legend() # 显示图形 plt.show()# 含噪声曲线拟合图 import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt # 设置图例字号 mpl.rcParams['legend.fontsize'] = 10 # 方式2:设置三维图形模式 fig = plt.figure() ax = fig.gca(projection='3d') # 测试数据 x = np.linspace(-4 * np.pi, 4 * np.pi, 30) y = x + np.random.randn(x.shape[-1]) * 0.7 z = x * x # 绘制图形 ax.plot(x, y, z, label='parametric1 curve') p_yx = np.polyfit(y,x,2); x_out = np.polyval(p_yx, y); p_yz = np.polyfit(y,z,2); z_out = np.polyval(p_yz, y); ax.plot(x_out, y, z_out, label='parametric2 curve') # 显示图例 ax.legend() # 显示图形 plt.show() # 拟合是拟合出一个误差小的曲线,这里并不包括光滑,当噪音大时,拟合的曲线不光滑。3D曲面import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax3 = plt.axes(projection='3d') plt.rcParams['font.sans-serif']=['FangSong'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号 #定义三维数据 xx = np.arange(-5,5,0.5) yy = np.arange(-5,5,0.5) X, Y = np.meshgrid(xx, yy) Z = np.sin(X)+np.cos(Y) #作图 ax3.plot_surface(X,Y,Z,cmap='rainbow') # 改变cmap参数可以控制三维曲面的颜色组合, 一般我们见到的三维曲面就是 rainbow 的 plt.show()曲面颜色import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt '''使用figure对象''' fig = plt.figure() '''创建3D轴对象''' ax = Axes3D(fig) '''X坐标数据''' X = np.arange(-2,2,0.1) '''Y坐标数据''' Y = np.arange(-2,2,0.1) '''计算3维曲面分格线坐标''' X,Y = np.meshgrid(X,Y) '''用于计算X/Y对应的Z值''' def f(x,y): return (1-y**5+x**5)*np.exp(-x**2-y**2) '''plot_surface函数可绘制对应的曲面''' ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.cool) # 通过修改camp修改曲面颜色 '''显示''' plt.show()曲面旋转import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt '''使用figure对象''' fig = plt.figure() '''创建3D轴对象''' ax = Axes3D(fig) '''X坐标数据''' X = np.arange(-2,2,0.1) '''Y坐标数据''' Y = np.arange(-2,2,0.1) '''计算3维曲面分格线坐标''' X,Y = np.meshgrid(X,Y) '''用于计算X/Y对应的Z值''' def f(x,y): return (1-y**5+x**5)*np.exp(-x**2-y**2) '''plot_surface函数可绘制对应的曲面''' ax.plot_surface(X,Y,f(X,Y),rstride=1,cstride=1,cmap=plt.cm.hot) '''旋转''' ax.view_init(elev=30,azim=125) '''显示''' plt.show()3D条形图import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt x = np.arange(8) y = np.random.randint(0,10,8) y2 = y + np.random.randint(0,3,8) y3 = y2 + np.random.randint(0,3,8) y4 = y3 + np.random.randint(0,3,8) y5 = y4 + np.random.randint(0,3,8) clr = ['red','green','blue','black','white','yellow','orange','pink'] fig = plt.figure() ax = Axes3D(fig) ax.bar(x,y,0,zdir='y',color=clr) ax.bar(x,y2,10,zdir='y',color=clr) ax.bar(x,y3,20,zdir='y',color=clr) ax.bar(x,y4,30,zdir='y',color=clr) ax.bar(x,y5,40,zdir='y',color=clr) ax.set_xlabel('X label') ax.set_ylabel('Y label') ax.set_zlabel('Z label') plt.show()附录01:三维绘图函数Axes3D

① mpl_toolkits.mplot3d是Matplotlib里面专门用来画三维图的工具包。

② Axes3D是mpl_toolkits.mplot3d中的一个绘图函数。

③ 创建 Axes3D主要有两种方式,一种是利用关键字projection='3d'来实现,另一种则是通过从mpl_toolkits.mplot3d导入对象Axes3D来实现,目的都是生成具有三维格式的对象Axes3D。

附录02:.view_init(elev,azim)

① elev为仰角,azim为方位角。

参考文献:Python使用matplotlib绘制三维曲线_weixin_33957648的博客-CSDN博客 Python三维绘图--Matplotlib_TomRen-CSDN博客 "♥我的笔记,希望对你有帮助♥"全套笔记GitHub - AccumulateMore/CV:最全面的 深度学习CV 笔记


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有