首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中绘制3D曲面

在python中绘制3D曲面
EN

Stack Overflow用户
提问于 2016-09-09 22:46:36
回答 2查看 3.7K关注 0票数 1

虽然有几个关于如何用XYZ格式绘制3D表面的来源。我有一个来自扫描激光的CSV文件,它没有提供X和Y的坐标信息,只提供了一个矩形网格的Z坐标。

这个文件是800x1600,只有z坐标。Excel可以很容易地用曲面图绘制它,但受到大小的限制。

我该如何解决这个问题?

Screenshot of data format

EN

回答 2

Stack Overflow用户

发布于 2016-09-10 00:02:01

您只需要创建XY坐标的数组。我们可以用numpy.meshgrid做到这一点。在下面的示例中,我将单元格大小设置为1.,但是您可以通过更改cellsize变量轻松地对其进行缩放。

代码语言:javascript
复制
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# Create x, y coords
nx, ny = 800, 1600
cellsize = 1.
x = np.arange(0., float(nx), 1.) * cellsize
y = np.arange(0., float(ny), 1.) * cellsize
X, Y = np.meshgrid(x, y)

# dummy data
Z = (X**2 + Y**2) / 1e6

# Create matplotlib Figure and Axes
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

print X.shape, Y.shape, Z.shape

# Plot the surface
ax.plot_surface(X, Y, Z)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()

票数 2
EN

Stack Overflow用户

发布于 2021-05-30 22:43:22

我遇到了类似的问题,@tmdavison的回复让我找到了正确的方向。但这个答案在从CSV文件中检索数据的部分不清楚。

这是我的解决方案。

代码语言:javascript
复制
import csv
import matplotlib.pyplot as plt
import numpy

def csv_3d(file_name):
    """Draw content of csv file with matplotlib 3D like MS Excel."""
    data = [
      [float(i.replace(',', '.')) for i in row]
      for row in csv.reader(open(file_name), delimiter=';')
    ]
    # matplotlib/numpy magic
    x_arr, y_arr = numpy.meshgrid(
      numpy.arange(0.0, float(len(data[0])), 1.0),  # x: number of columns in csv
      numpy.arange(0.0, float(len(data)), 1.0),  # y: number of rows in csv
    )
    z_arr = numpy.array(data)  # transform csv data into 2D values numpy array

    plt.figure(num=file_name)
    axes = plt.axes(projection="3d")
    axes.plot_surface(x_arr, y_arr, z_arr)
    plt.show()

csv_3d('my.csv')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39414278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档