python中的绘图4D绘图

python中的绘图4D绘图,python,matplotlib,plot,Python,Matplotlib,Plot,我知道我在打一匹死马,但我找不到正确的答案 我想从大数据中绘制一个图: X-Coord Y-Coord Z-Coord Value 20'000 rows 当我调用 X, Y = np.meshgrid(X, Y) 我得到一个错误: Traceback (most recent call last): File "new 1.py", line 17, in <module> X, Y = np.meshgrid(X, Y) # <-- ret

我知道我在打一匹死马,但我找不到正确的答案

我想从大数据中绘制一个图:

X-Coord   Y-Coord   Z-Coord   Value
20'000 rows
当我调用

X, Y = np.meshgrid(X, Y)
我得到一个错误:

  Traceback (most recent call last):
  File "new 1.py", line 17, in <module>
    X, Y = np.meshgrid(X, Y)  # <-- returns a 2D grid from initial 1D arrays
  File "C:\Program Files (x86)\lib\site-packages\numpy\lib\function_base.py", line 4698, in meshgrid
    output = [x.copy() for x in output]
  File "C:\Program Files (x86)\lib\site-packages\numpy\lib\function_base.py", line 4698, in <listcomp>
    output = [x.copy() for x in output]
MemoryError
UPD2: 感谢@ImportanceOfBeingErnest提供的良好解决方案

最后,为了加快分散旋转期间的数据处理,我减少了阵列并使用了另一个后端。还为结果添加了颜色栏

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm

import matplotlib
matplotlib.use('svg')

x,y,z,v = np.loadtxt("datafile.txt", skiprows=2, unpack=True)
if len(x) > 400000:
  x = x[::50] 
  y = y[::50] 
  z = z[::50]
  v = v[::50] 
elif len(x) > 200000:
  x = x[::20] 
  y = y[::20] 
  z = z[::20]
  v = v[::20] 
elif len(x) > 100000:
  x = x[::10] 
  y = y[::10] 
  z = z[::10]
  v = v[::10]   

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')


ax.scatter(x,y,z,c=v, s=10, cmap=cm.rainbow)

m = cm.ScalarMappable(cmap=cm.rainbow)

m.set_array(v)
cbar = plt.colorbar(m)

plt.show()

您可以使用散点图根据表格的最后一列用颜色绘制点;然后,可以使用
绘图\u trisurf
来获得曲面交叉的概念

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

x,y,z,v = np.loadtxt("datafile.txt", skiprows=1, unpack=True)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x,y,z, edgecolor="gray", color="None")
ax.scatter(x,y,z,c=v, s=100)

您正在创建两个阵列,每个阵列包含20000*20000个元素,即总共8亿个条目。如果它们是整数,则需要约3 GB内存;如果它们是浮点数,则需要约6 GB内存。可能是你的内存不够大,无法容纳它们。但是,不清楚这些列包含哪些数据以及为什么在此处使用
meshgrid
。首先使用一个大约20行的小示例,但要在这里获得帮助,请参阅,请重复该示例。我添加了一个数据示例。关于RAM,我的机器上有64Gb。由于表中的坐标看起来很随机,
meshgrid
将毫无帮助。您有两个选项:在常规网格上插值,或使用三角剖分。@ImportanceOfBeingErnest,但是否可以简单地创建一个点(XYZ),然后从第4列开始设置该点的值?在该颜色之后,所有点和最好的情况下,将最近的点或类似的SMT连接到曲面?
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

x,y,z,v = np.loadtxt("datafile.txt", skiprows=1, unpack=True)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x,y,z, edgecolor="gray", color="None")
ax.scatter(x,y,z,c=v, s=100)