python - 如何使用文本文件中的值在 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()
我该如何解决这个问题?我还附上了实际文本文件的图像, 请单击此处
谢谢你。
解决方案
要绘制一个 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 的评论也很中肯。在除法的情况下检查空值/零值很重要。
推荐阅读
- c# - 右键单击系统托盘中的通知图标不显示上下文菜单
- reactjs - 连续成功触发两个 useReducer 钩子
- android - 如何将 ibm watson 语音中的扬声器标签更改为 android 中的文本 api?
- javascript - JavaScript:如何正确循环数组并将值用作键?
- amazon-web-services - Amazon DynamoDB 行级授权非唯一 ID
- graphicsmagick - gm convert:此图像格式没有解码委托
- laravel - GItLab 没有将 laravel 应用程序部署到 AWS ec2
- html - 调整浏览器窗口大小时,块元素变得更大并且不会保持垂直居中
- c# - 如何实现类似“如果玩家同时按下 ctrl 和 w”,移动速度(向前力)将为 2000 而不是 1000
- python - 安装 python 包时出现“确认 ssl 证书时出现问题”