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)