python matlibplot绘制3D图形
Python的matplotlib库是数据可视化的重要工具,其中的mpl_toolkits.mplot3d模块则专门用于创建三维图形。本文将深入探讨如何使用matplotlib来绘制3D图形,主要包括3D散点图和3D直线的绘制方法。 我们来看3D散点图的创建。在Python中,我们可以利用numpy生成多维随机数据,然后使用scatter函数绘制3D散点图。以下是一个实例: ```python import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt # 定义3个类别的数据 mu_vec1 = np.array([0,0,0]) cov_mat1 = np.array([[1,0,0],[0,1,0],[0,0,1]]) class1_sample = np.random.multivariate_normal(mu_vec1, cov_mat1, 20) class2_sample = np.random.multivariate_normal(mu_vec1 + 1, cov_mat1, 20) class3_sample = np.random.multivariate_normal(mu_vec1 + 2, cov_mat1, 20) # 创建3D散点图 fig = plt.figure(figsize=(8,8)) ax = fig.add_subplot(111, projection='3d') ax.scatter(class1_sample[:,0], class1_sample[:,1], class1_sample[:,2], marker='x', color='blue', s=40, label='class 1') ax.scatter(class2_sample[:,0], class2_sample[:,1], class2_sample[:,2], marker='o', color='green', s=40, label='class 2') ax.scatter(class3_sample[:,0], class3_sample[:,1], class3_sample[:,2], marker='^', color='red', s=40, label='class 3') # 添加坐标轴标签和标题 ax.set_xlabel('variable X') ax.set_ylabel('variable Y') ax.set_zlabel('variable Z') plt.title('3D Scatter Plot') plt.show() ``` 这段代码首先生成了3组3D空间中的随机数据,每组数据代表一个类别。然后,通过创建带有3D投影的子图,并调用scatter函数,我们可以将这些数据点以不同的形状和颜色绘制出来,形成3D散点图。添加坐标轴标签和标题,使图形更易于理解。 接下来,我们讨论如何绘制3D直线。这里以绘制一个3D立方体为例: ```python import matplotlib.pyplot as plt import numpy as np from itertools import product, combinations fig = plt.figure(figsize=(7,7)) ax = fig.gca(projection='3d') ax.set_aspect("equal") # 内部和外部点的数据 X_inside = np.array([[0,0,0],[0.2,0.2,0.2],[0.1, -0.1, -0.3]]) X_outside = np.array([[-1.2,0.3,-0.3],[0.8,-0.82,-0.9],[1, 0.6, -0.7], [0.8,0.7,0.2],[0.7,-0.8,-0.45],[-0.3, 0.6, 0.9], [0.7,-0.6,-0.8]]) # 绘制内部点 for row in X_inside: ax.scatter(row[0], row[1], row[2], color="r", s=50, marker='^') # 绘制外部点 for row in X_outside: ax.scatter(row[0], row[1], row[2], color="k", s=50) # 绘制立方体的边 h = [-0.5, 0.5] for s, e in combinations(np.array(list(product(h,h,h))), 2): if np.sum(np.abs(s-e)) == h[1]-h[0]: ax.plot3D(*zip(s,e), color="g") # 设置坐标轴范围 ax.set_xlim(-1.5, 1.5) ax.set_ylim(-1.5, 1.5) ax.set_zlim(-1.5, 1.5) plt.show() ``` 这个例子中,我们首先定义了立方体内部和外部的点,然后使用scatter函数绘制这些点。接着,通过combinations函数和product函数生成所有可能的边对,检查它们的长度是否等于立方体的边长,如果满足条件,则用plot3D函数绘制这条边。设置坐标轴的范围,以确保图形的清晰度。 通过这两个例子,我们可以看到matplotlib的mpl_toolkits.mplot3d模块提供了强大的3D图形绘制功能,能够帮助我们直观地展示3D空间中的数据分布和结构。无论是散点图还是线性结构,都能通过简单的代码实现。在数据分析和可视化项目中,掌握这些技巧对于理解复杂数据和模型至关重要。
- 粉丝: 2
- 资源: 912
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助