Прямой объемный массив Python 3D массив - PullRequest
0 голосов
/ 08 января 2019

Я хочу построить трехмерный массив. Есть ли способ, которым я могу напрямую подавать массив, который строит график вокселя и с фактическим значением (цветом) по координате, которая возникает из положения в 3d-массиве? Все методы, которые я нашел до сих пор (например, ax.voxels, mlab.points3d ...), принимают массив для координат x, y и z каждого, но я бы не хотел явно указывать координаты, точно так же как один из них не имеет делать в plt.imshow.

Edit: Я хочу построить массив, например как это: a = [[[10,20], [5,300]], [[7,80], [9,12]]] Это должно дать кубу, у которого есть значения внутри массива в координатах, которые дают индексы массива. Я хотел бы знать, если есть метод, который может взять такой массив напрямую и построить его.

1 Ответ

0 голосов
/ 08 января 2019

Похоже, вопрос заключается в том, как построить массив (n, m, l) в форме вокселей, где цвет вокселей задается значениями массива. Это требует цветовой карты и нормализации для преобразования значений в цвета (потому что voxels не принимает цветовые карты в качестве входных данных напрямую).

Остальное прямо:

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

a = np.array( [ [ [10,20], [5,300] ] , [ [7,80],[9,12] ] ] )

fig = plt.figure()
ax = fig.gca(projection='3d')

cmap = plt.get_cmap("viridis")
norm= plt.Normalize(a.min(), a.max())
ax.voxels(np.ones_like(a), facecolors=cmap(norm(a)), edgecolor="black")

plt.show()

enter image description here

...