绘制三维散点图_matplotlib库:三维图形

本文介绍了如何使用matplotlib库在Python中绘制各种三维图形,包括三维散点图、三维曲线图、三维曲面图、三维线框图和三维柱形图。通过设置坐标轴为3D,使用scatter、plot、plot3D、plot_surface、plot_wireframe等函数,可以生成相应的三维视觉效果。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

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()
183cf4ee70d5160ea178071fb9395c3a.png

上述代码结果图

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()
22229e708c4324c551955d2a51509ba5.png

上述代码结果图

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()
f41c41a565e1e714f8d7a37e29a50d7e.png

上述代码结果图

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()
afd8ec590f178d79736d6b2b5103488d.png

上述代码结果图

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,每名学生的成绩如下所示。

0f14d7e9640e9b34dbd5e66880670ab8.png

学生成绩表

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()
48c498f358f0c70cc13765a344c1dc31.png

上述代码结果图

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值