如何使用pyplot mplot3d读取CSV文件并绘制3D散点图?
用Matplotlib的mplot3d绘制3D散点图的完整方案
嘿,刚好我之前处理过类似的网格数据绘图需求,给你详细讲一下步骤,附带可直接运行的代码:
1. 先理清楚数据结构
你的CSV数据是4行3列的网格:
- 每行对应一个x值(x=1,2,3,4)
- 每列对应一个y值(y=1,2,3)
- 每个单元格的数值就是对应(x,y)点的z值
2. 读取CSV数据
推荐用numpy来读取,比原生csv模块更高效,尤其适合网格数据:
import numpy as np # 读取CSV,注意你的数据是分号分隔,所以指定delimiter=';' z_data = np.genfromtxt('your_file.csv', delimiter=';') # 此时z_data是一个4x3的numpy数组,完美对应x=1-4、y=1-3的z值
如果你的CSV文件带表头,可以加skip_header=1参数跳过第一行。
3. 生成对应的x、y坐标数组
散点图要求x、y、z都是一维数组,我们需要把网格坐标展开:
# 定义x和y的原始取值 x_coords = np.array([1, 2, 3, 4]) y_coords = np.array([1, 2, 3]) # 生成网格坐标,indexing='ij'确保x对应行、y对应列(和你的数据结构完全匹配) x, y = np.meshgrid(x_coords, y_coords, indexing='ij') # 把二维网格展平成一维数组 x_flat = x.flatten() y_flat = y.flatten() z_flat = z_data.flatten()
用meshgrid的好处是,之后哪怕x、y的取值范围变了,你只需要修改x_coords和y_coords就行,不用手动重复数值。
4. 绘制3D散点图
接下来用mplot3d创建可视化:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建画布和3D坐标轴 fig = plt.figure(figsize=(10, 7)) ax = fig.add_subplot(111, projection='3d') # 绘制散点图,可自定义颜色、大小等参数 scatter = ax.scatter(x_flat, y_flat, z_flat, c=z_flat, cmap='viridis', s=100) # 设置坐标轴标签和标题 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.set_title('3D Scatter Plot of Grid Data') # 添加颜色条,对应z值的颜色映射 fig.colorbar(scatter, ax=ax, label='Z Value') # 显示图形 plt.show()
额外小提示
- 如果你的CSV数据是逗号分隔(不是分号),把
delimiter=';'改成delimiter=','就行 - 可以调整
scatter函数的c(颜色)、s(点大小)、cmap(颜色映射)参数来美化图形 - 如果需要保存高清图片,在
plt.show()之前加plt.savefig('3d_scatter.png', dpi=300)就行
内容的提问来源于stack exchange,提问作者Stepan
相关产品推荐
相关产品推荐

