我有一个脚本,它分析数据集,然后输出xyz数据。为了理解数据的分布,我想在三维图中将其可视化。由于我没有经验什么那么使用matplotlib,我刚刚从here复制的代码,并期待它my text file的工作,看起来像这样:Matplotlib RuntimeWarning显示3D图
-0.9 -0.9 483
-0.9 -0.7 224
-0.9 -0.5 156
-0.9 -0.3 153
-0.9 -0.1 174
-0.9 0.1 268
-0.9 0.3 95
-0.9 0.5 59
-0.9 0.7 50
-0.9 0.9 199
-0.7 -0.9 917
-0.7 -0.7 244
-0.7 -0.5 208
-0.7 -0.3 148
-0.7 -0.1 139
-0.7 0.1 98
-0.7 0.3 52
-0.7 0.5 56
-0.7 0.7 60
-0.7 0.9 221
...
但是,一旦我开始了剧本,我得到以下错误,导致颜色条显示不正确:
Warning (from warnings module):
File "C:\Program Files\Python35\lib\site-packages\matplotlib\colors.py", line 496
cbook._putmask(xa, xa < 0.0, -1)
RuntimeWarning: invalid value encountered in less
此外,该图的边缘上有这些三角形。我不确定他们是否也是上述错误的后果。 这是输出:
这是我的代码:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
data = np.genfromtxt('plot.txt')
x = data[:,0]
y = data[:,1]
z = data[:,2]
xi = np.linspace(-1, 1)
yi = np.linspace(-1, 1)
X, Y = np.meshgrid(xi, yi)
Z = griddata(x, y, z, xi, yi, interp='linear')
surf = ax.plot_surface(X, Y, Z, rstride=5, cstride=5, cmap=cm.jet,
linewidth=1, antialiased=True)
ax.set_zlim3d(np.min(Z), np.max(Z))
fig.colorbar(surf)
plt.show()
EDIT 1: 我编辑的源代码以打印XA有问题的行,其输出之前:
[ nan nan nan nan nan nan nan nan nan nan nan 256.
256. 256. 256. 256. 256. 256. 256. nan nan 256. 256. 256.
256. 256. 256. 256. 256. nan nan 256. 256. 256. 256. 256.
256. 256. 256. nan nan 256. 256. 256. 256. 256. 256. 256.
256. nan nan 256. 256. 256. 256. 256. 256. 256. 256. nan
nan 256. 256. 256. 256. 256. 256. 256. 256. nan nan 256.
256. 256. 256. 256. 256. 256. 256. nan nan 256. 256. 256.
256. 256. 256. 256. 256. nan nan nan nan nan nan nan
nan nan nan nan]
所以我在这里显然有一些NaN值,但我不确定它们来自哪里。
这是一个警告,而不是一个错误,所以你得到一个情节了。如果没有问题,真的很难知道发生了什么,即我们没有您的数据。最好尝试在代码中生成一些数据来重现问题。 – ImportanceOfBeingErnest
如果你转到源代码并将'print(xa)'放在违规行之前,你会看到该数组包含nan值,这是因为你的'Z'包含nan值。 – Reti43
@ImportanceOfBeingErnest感谢您的快速响应和编辑我的文章。我确实向您提供了我的数据。 [上面的链接](https://pastebin.com/raw/UsQ5eArF)包含我所有的xyz坐标。 – TheJD