如何使用文本文件中的值在python中创建曲面图?

时间:2018-07-21 17:37:02

标签: python

我正在尝试从具有四个列和700行的文本文件中获取3D表面图。我已经编写了下面的代码来生成该图,但是我一直不断收到以下错误:

invalid value encountered in true_divide

z = (x*y*mlim)/(x*y)

raise ValueError("Argument Z must be 2-dimensional.")

ValueError: Argument Z must be 2-dimensional.

这是我的代码

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np


f2 = open('openfile.txt', 'r')
i6 = list()
i9 = list()
i10 = list ()
count = 0
while True:
    a = f2.readline()
    if not a: break
    v = a.split()
    i6.append(float(v[0]))
    i9.append(float(v[1]))
    i10.append(float(v[3]))
    count = count + 1


mlim = np.array(i6)
ira = np.array(i9)
dec = np.array(i10)

x = ira
y = dec
z = (x*y*mlim)/(x*y)



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(x,y,z, rstride=10, cstride=10)
plt.savefig('filesave.png')
plt.close()

我该如何解决? 我还附上了实际文本文件的图像 click here

谢谢。

1 个答案:

答案 0 :(得分:0)

要绘制3D曲面(在您的情况下为线框),必须先创建网格(也称为矩阵),然后才能在函数(x*y*mlim)/(x*y)中进行映射。

以下更改可能会解决您的问题:

# More of your code above this

x = ira
y = dec

# Create a meshgrid
X, Y = np.meshgrid(x,y)

# Now you can build you z array using the correct mapping
# Note that mlim variable works as an scalar
z = (X*Y*mlim)/(X*Y)

上面@Koustav的评论也很相关。在除法的情况下,检查空/零值非常重要。