# [SOLVED] Can a 3D numpy array be converted into a 3D image in Python?

## Issue

I made the following virtual "room" in a 3D array and would like to visualize it. I can’t find a way to do so, please assist. The idea is to see a "3D image" of the array as a plot where the different values have different colours or just greyscale intensities, so that you can see the "patient" and the "detector" inside the "room":

``````import numpy as np

# Diff. values in the Room define objects: 0 = walls, 1 = inside room, 2 = patient's tissue, 3 = bone, 4 = x-ray detector

Room = np.array([[[0.0 for i in range(0,101,1)] for j in range(0,101,1)] for k in range(0,101,1)]) #The entire room with walls

for i in range(1,100,1):
for j in range(1,100,1):
for k in range(1,100,1):
Room[i,j,k] +=1     # The room not counting the walls

for i in range(30,70,1):
for j in range(30,70,1):
for k in range(30,70,1):
Room[i,j,k] +=1      #The patient's body (tissue)

for i in range(50,55,1):
for j in range(50,55,1):
for k in range(50,55,1):
Room[i,j,k] +=1      #The patient's bone #1

for i in range(58,63,1):
for j in range(58,63,1):
for k in range(58,63,1):
Room[i,j,k] +=1      #The patient's bone #2

for i in range(88,92,1):
for j in range(10,90,1):
for k in range(10,90,1):
Room[i,j,k] +=1      # X-ray Detector
``````

## Solution

You can create a 3 dimensional mesh grid with the help of matplotlib and numpy. Here is an example of such a plot. You just want to feed in your X,Y, and Z values as lists

import numpy as np
import matplotlib.pyplot as plt

``````# Create figure and add axis
fig = plt.figure(figsize=(8,6))
ax = plt.subplot(111, projection='3d')

# Remove gray panes and axis grid
ax.xaxis.pane.fill = False
ax.xaxis.pane.set_edgecolor('white')
ax.yaxis.pane.fill = False
ax.yaxis.pane.set_edgecolor('white')
ax.zaxis.pane.fill = False
ax.zaxis.pane.set_edgecolor('white')
ax.grid(False)
# Remove z-axis
ax.w_zaxis.line.set_lw(0.)
ax.set_zticks([])

# Create meshgrid
X, Y = np.meshgrid(np.linspace(0, 2, len(afm_data)), np.linspace(0, 2, len(afm_data)))

# Plot surface
plot = ax.plot_surface(X=X, Y=Y, Z=Z, cmap='YlGnBu_r', vmin=0, vmax=200)
``````

There is a towards data science article on the topic: https://towardsdatascience.com/visualizing-three-dimensional-data-heatmaps-contours-and-3d-plots-with-python-bd718d1b42b4