Как масштабировать воксельные размеры с помощью Matplotlib? - PullRequest
1 голос
/ 25 июня 2019

Хотите масштабировать воксельные размеры с помощью Matplotlib. Как я могу это сделать?

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

fig = plt.figure()
ax = fig.gca(projection='3d')
# Make grid
test2 = np.zeros((6, 6, 6))
# Activate single Voxel
test2[1, 0, 4] = True

ax.voxels(test2, edgecolor="k")
ax.set_xlabel('0 - Dim')
ax.set_ylabel('1 - Dim')
ax.set_zlabel('2 - Dim')

plt.show()

Вместо вокселя на позицию (1,0,4). Я хочу масштабировать его на (0,5,0,2).

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Вы можете передать пользовательские координаты в функцию voxels: Ссылка API .

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

fig = plt.figure()
ax = fig.gca(projection='3d')
# Make grid
test2 = np.zeros((6, 6, 6))
# Activate single Voxel
test2[1, 0, 4] = True

# Custom coordinates for grid
x,y,z = np.indices((7,7,7))/2

# Pass the custom coordinates as extra arguments
ax.voxels(x, y, z, test2, edgecolor="k")
ax.set_xlabel('0 - Dim')
ax.set_ylabel('1 - Dim')
ax.set_zlabel('2 - Dim')

plt.show()

Что даст:

enter image description here

0 голосов
/ 25 июня 2019

voxels принять координаты сетки, на которую нужно поместить воксели.

voxels([x, y, z, ]/, filled, ...)

x, y, z: 3D np.array, необязательно
Координаты углов вокселей. Это должно транслироваться в форму, которая больше в каждом измерении, чем форма заполненного. Их можно использовать для построения некубических вокселей.

Если не указано, по умолчанию увеличивается целое число по каждой оси, например, возвращаемые indices () . Как указано в / в сигнатуре функции, эти аргументы могут передаваться только позиционно.

В этом случае

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

fig = plt.figure()
ax = fig.gca(projection='3d')
# Make grid
voxels = np.zeros((6, 6, 6))
# Activate single Voxel
voxels[1, 0, 4] = True

x,y,z = np.indices(np.array(voxels.shape)+1)

ax.voxels(x*0.5, y, z, voxels, edgecolor="k")
ax.set_xlabel('0 - Dim')
ax.set_ylabel('1 - Dim')
ax.set_zlabel('2 - Dim')

plt.show()
...