如何根据从文件读取的数据 z=f(x,y) 在 matplotlib 中制作 3D 图

How to make a 3D plot in matplotlib from data z=f(x,y) read from file

我需要在 matplotlib 中创建 3D 图。我正在从格式化为一维数组的文本文件中读取 Z 值。此数据表示 50x50 正方形上每个点的值。因此,前 50 个值用于点 (0,0)、(1,0)..(49,0),接下来的 50 个值用于 (0,1)、(1,1) 等等。到目前为止,我已经编写了以下代码:

  import matplotlib.pyplot as plt
  import numpy as np

    fp=open(path,"r")
    a=fp.read()
    buffer=""
    data=[]
    for i in a:
        if i != ' ':
            buffer=buffer+i
        else:
            data.append(float(buffer))
            buffer=""
    fp.close()


    values=data[50*50:50*50*2]

    x=np.linspace(0,50,50)
    y=np.linspace(0,50,50)

    fig = plt.figure()
    ax = fig.gca(projection='3d')

    ax.plot_trisurf(x, y, values)

    plt.show()

但是当然不行。我在互联网上搜索了一些线索,但没有成功。有人可以告诉我应该怎么做吗?我将不胜感激。

首先,您忘记导入 Axes3D:import matplotlib.pyplot as plt

其次,您的代码有奇怪的无意义行:values[50*50*nb:50*50*(nb+1)] 并且代码中的缩进错误。

第三,要绘制不需要 plot_trisurf 的规则网格化数据,请使用 plot_surface:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

x=np.linspace(0,50,50)
y=np.linspace(0,50,50)
X, Y = np.meshgrid(x, y)
values = np.sqrt(X**2 + Y**2)

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(x, y, values)
plt.show()

查找示例:http://matplotlib.org/examples/mplot3d/surface3d_demo.html