1.三维散点图
# 三维图形必须导入该模块from mpl_toolkits import mplot3d# 方式一ax = plt.axes(projection='3d')ax.scatter3D(xs, ys, zs, s, c,marker,alpha,label))# 方式二ax = plt.axes(projection='3d')ax.scatter(xs, ys, zs, s, c,marker,alpha,label)除了Z坐标外,三维散点图和二维散点图各参数意义一致,具体取值详见matplotlib库:散点图。在设置坐标轴为3d后,scatter与scatter3D两个函数是等价的。事实上,带有projection参数的相关函数均可生成三维图形的轴对象如subplot(projection='3d'),add_subplot(projection='3d')等,在此基础上均可调用相关函数生成对应的三维图形。
from mpl_toolkits import mplot3dimport matplotlib.pyplot as plt# 数据x = [1, 2, 6, 7, 4, 8, 5]y = [2, 4, 1, 5, 6, 7, 3]z = [3, 6, 2, 7, 9, 8, 2]ax = plt.axes(projection='3d')ax.scatter(x, y, z, c=z, s=200, cmap='jet')ax.set_title('三维散点图', fontproperties='STSong')ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)plt.tight_layout()plt.show()
上述代码结果图
2.三维曲线图
# 三维图形必须导入该模块from mpl_toolkits import mplot3d# 方式一ax = plt.axes(projection='3d')ax.plot3D(xs,ys,zs,marker,color,linestyle,linewidth,label)# 方式二ax = plt.axes(projection='3d')ax.plot(xs,ys,zs,marker,color,linestyle,linewidth,label)参数:xs、ys、zs--为X、Y、Z坐标;除了Z坐标外,三维曲线图和二维曲线图各参数意义一致,具体取值详见matplotlib库:折线图。在设置坐标轴为3d后,plot与plot3D两个函数同样是等价的。
import numpy as npfrom mpl_toolkits import mplot3dimport matplotlib.pyplot as pltw = np.linspace(0,20,100)x = np.cos(w)y = np.sin(w)ax = plt.axes(projection='3d')ax.set_title("三维曲线图", fontproperties='STSong')ax.plot(x,y,w)ax.xaxis.set_major_locator(plt.MultipleLocator(0.3))ax.yaxis.set_major_locator(plt.MultipleLocator(0.3))ax.zaxis.set_major_locator(plt.MultipleLocator(5))plt.tight_layout()plt.show()
上述代码结果图
3.三维曲面图
plot_surface(X,Y,Z,rcount,ccount,rstride,cstride,color,cmap)参数:X、Y、Z--均为网格坐标矩阵(二维数组);rcount、ccount--横、纵向采样数量,必须为整数,设置较大的值可使图形更加精细;rstride、cstride--横、纵向采样步长,必须为整数,设置较小的值可使图形更加精细;color--颜色;cmap--颜色映射;color常见取值见matplotllib库:散点图;cmap常见取值见matplotlib库:热力图。
import numpy as npfrom mpl_toolkits import mplot3dimport matplotlib.pyplot as plt# 数据x = np.arange(-5, 5, 0.5)y = np.arange(-5, 5, 0.5)x, y = np.meshgrid(x, y)z = x**2 + y**2ax = plt.axes(projection='3d')surface = ax.plot_surface(x, y, z, cmap='jet', rcount=100, ccount=100)ax.set_title('三维曲面图', fontproperties='STSong')ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)plt.colorbar(surface, shrink=0.8)plt.tight_layout()plt.show()
上述代码结果图
4.三维线框图
plot_wireframe(X,Y,Z,rcount,ccount,rstride,cstride,color,cmap)作用:绘制三维线框图。参数:与plot_surface函数中的参数取值及意义一致。import numpy as npfrom mpl_toolkits import mplot3dimport matplotlib.pyplot as plt# 数据x = np.arange(-5, 5, 0.5)y = np.arange(-5, 5, 0.5)x, y = np.meshgrid(x, y)z = x**2 + y**2ax = plt.axes(projection='3d')ax.plot_wireframe(x, y, z, cmap='jet', rcount=100, ccount=100)ax.set_title('三维线框图', fontproperties='STSong')ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)plt.tight_layout()plt.show()
上述代码结果图
5.三维柱形图
# 三维图形必须导入该模块from mpl_toolkits import mplot3dax = plt.axes(projection='3d')ax.bar(left, height, zs, zdir)参数:left--柱子x坐标标识;height--柱子的高度;zs--柱子的z坐标位置,如果设为固定值,则在同一位置处绘制柱形图;zdir--绘制二维系列图的方向(三维柱形图可看做多个系列的二维图),可取值为'x'、'y'、'z'。为了更好说明三维柱形图的意义,这里构造如下数据,假设有四个班级序号分别为10、20、30、40,每个班级有7名学生序号为1~7,每名学生的成绩如下所示。

学生成绩表
import numpy as npfrom mpl_toolkits import mplot3dimport matplotlib.pyplot as plt# 数据x = np.arange(1, 10)y = [ [50, 60, 70, 80, 30, 60, 66, 99, 66], [56, 34, 77, 98, 88, 34, 44, 33, 22], [67, 88, 66, 88, 45, 55, 56, 77, 66], [88, 56, 67, 45, 67, 78, 88, 33, 99],]z = [10, 20, 30, 40]plt.rc('font', family='STSong')ax = plt.axes(projection='3d')for i in range(4): ax.bar(x, y[i], zs=z[i], zdir='y')ax.set_title('三维柱形图', fontproperties='STSong')ax.set_xlabel('学生序号', fontsize=14, labelpad=10)ax.set_ylabel('班级序号', fontsize=14, labelpad=15)ax.set_zlabel('分数', fontsize=14, labelpad=5)ax.xaxis.set_major_locator(plt.MultipleLocator(1))ax.yaxis.set_major_locator(plt.MultipleLocator(10))plt.show()
上述代码结果图
本文介绍了如何使用matplotlib库在Python中绘制各种三维图形,包括三维散点图、三维曲线图、三维曲面图、三维线框图和三维柱形图。通过设置坐标轴为3D,使用scatter、plot、plot3D、plot_surface、plot_wireframe等函数,可以生成相应的三维视觉效果。

1万+


被折叠的 条评论
为什么被折叠?



