2017-06-22 210 views
0

我有我试图以3D可视化10x10x10 numpy的矩阵:如何使用matplotlib将三维矩阵映射到三维散点图中的颜色值?

from mpl_toolkits.mplot3d import Axes3D 
M = np.random.rand(10, 10, 10) 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
counter = range(10) 
ax.scatter(counter, counter, counter, c=??) 

我想3D绘图,其中在位置i,j,k黑暗由M[i,j,k]给出。我想如何通过Mscatter(),以便它正确地做到这一点?它似乎想要一个二维数组,但我不明白这将如何工作在这种情况下。

+0

你必须是由10个点的分散。你如何将M的1000点分配给分散点的10个点? – ImportanceOfBeingErnest

回答

0

的散射需要相同数量的比色阵列c点。所以对于1000种颜色,你需要1000分。

import matplotlib.pyplot as plt 
import numpy as np 

from mpl_toolkits.mplot3d import Axes3D 
M = np.random.rand(10, 10, 10) 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
counter = range(10) 
x,y,z = np.meshgrid(counter, counter, counter) 
ax.scatter(x,y,z, c=M) 


plt.show() 

enter image description here

+0

谢谢!这已经清除了一些东西。但是我仍然被'scatter'与'M'混淆。例如,如果我将代码切换到'M = np.random.rand(11,10,10)'并保持原样,则会出现错误:“ValueError:颜色数组必须是二维的”。但在你的工作示例中,它是三维的...... – theQman

+0

哦,这可能只是因为有人忘记将错误消息更改为3D情况。我会将其解释为“颜色数组的形状与输入数组的形状不匹配”或类似。它总是相同的:如果你有1000点,你需要1000种颜色,如果你有1100种颜色,你需要1100点,每种颜色一点。 – ImportanceOfBeingErnest