我正在尝试从具有四个列和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
谢谢。
答案 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的评论也很相关。在除法的情况下,检查空/零值非常重要。