2017-06-22 131 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