在3D空间中绘制(x,y,z)点的2D数组(Matplotlib)

时间:2018-11-14 14:31:05

标签: numpy matplotlib mplot3d

我是Python的初学者,尤其是Matplotlib。我有一个22797x3数组,它是通过两个其他数组(一个22797x400长,另一个400x3长)之间的乘法构建的。在结果数组(22797x3)中,每行代表一个具有(x,y,z)坐标的点,因此为3列。我如何在3D曲面上绘制结果数组,在那里我可以看到所有22797点在3D空间中的分布?这些数据用于将来的Kmeans聚类,因此我需要对其进行可视化。

到目前为止,我已经尝试过:

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

#building the 22797x3 array: 


#loading the first array from .txt file, 22797x400 long.
array = np.loadtxt('C:\Users\Scripts/final_array.txt', usecols=range(400))  
array = np.float32(array)

#loading the second array from .txt file, 400x3 long. 
small_vh2 = np.loadtxt('C:\Users\Scripts/small_vh2.txt', usecols=range(3))  
small_vh2 = np.float32(small_vh2)

#multiplying and getting result array 22797x3 long:

Y = np.array(np.matmul(array,small_vh2))
#I've checked Y dimensions, it's 22797x3 long, working fine.

#now I must plot it in 3D:
fig = plt.figure()

ax = Axes3D(fig)
ax.scatter(Y[:, 0], Y[:, 1], Y[:, 2])

plt.show() 

我一直得到如下图所示的结果:

https://i.stack.imgur.com/jRyHM.jpg

我需要得到的是22797点,而我一直仅得到仅绘制4个点。有人知道代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

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

# made 2 random arrays of the same size as yours
array = np.random.rand(22797, 400)
small_vh2 = np.random.rand(400,3)  
Y = np.matmul(array,small_vh2)

#now I must plot it in 3D:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(Y[:, 0], Y[:, 1], Y[:, 2], alpha = 0.1)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

enter image description here