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

时间:2016-06-05 10:44:14

标签: python matplotlib 3d mplot3d

我需要在matplotlib中创建一个3D图。我正在从格式化为1D数组的文本文件中读取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()

但当然不行。我在互联网上搜索了一些线索但没有任何成功。有人能告诉我应该怎么做吗?我会非常感激。

1 个答案:

答案 0 :(得分:1)

首先,您忘记导入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()

enter image description here

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