首页 > 解决方案 > 如何使用文本文件中的值在 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()

我该如何解决这个问题?我还附上了实际文本文件的图像, 请单击此处

谢谢你。

标签: python

解决方案


要绘制一个 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 的评论也很中肯。在除法的情况下检查空值/零值很重要。


推荐阅读