如何使用Matplotlib在Python中制作魔方并设置各面独立颜色
如何用Matplotlib给魔方的每个面设置独立颜色?
你的代码目前是给整个x层设置统一颜色,但Matplotlib的voxels函数中,facecolors参数需要针对每个立方体的六个面分别指定颜色,正确的维度应该是 (nx, ny, nz, 6, 4),其中6对应六个面的固定顺序:x-(左)、x+(右)、y-(下)、y+(上)、z-(后)、z+(前)。
下面是修正后的代码,实现标准魔方的颜色设置:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np # 魔方尺寸:3x3x3 size = 3 data = np.ones((size, size, size)) alpha = 0.9 # 定义魔方六个面的标准颜色(RGBA) face_colors = { 'x-': [0, 1, 0, alpha], # 左面:绿色 'x+': [0, 0, 1, alpha], # 右面:蓝色 'y-': [1, 1, 1, alpha], # 下面:白色 'y+': [1, 1, 0, alpha], # 上面:黄色 'z-': [1, 0.5, 0, alpha], # 后面:橙色 'z+': [1, 0, 0, alpha] # 前面:红色 } # 初始化facecolors数组,默认用灰色填充内部面 colors = np.full((size, size, size, 6, 4), [0.5, 0.5, 0.5, alpha]) # 给魔方的外表面设置对应颜色 # 左面(x=0的所有立方体的x-面) colors[0, :, :, 0] = face_colors['x-'] # 右面(x=2的所有立方体的x+面) colors[2, :, :, 1] = face_colors['x+'] # 下面(y=0的所有立方体的y-面) colors[:, 0, :, 2] = face_colors['y-'] # 上面(y=2的所有立方体的y+面) colors[:, 2, :, 3] = face_colors['y+'] # 后面(z=0的所有立方体的z-面) colors[:, :, 0, 4] = face_colors['z-'] # 前面(z=2的所有立方体的z+面) colors[:, :, 2, 5] = face_colors['z+'] fig = plt.figure(figsize=(8, 8)) ax = fig.add_subplot(111, projection='3d') # 绘制魔方,edgecolors设置为灰色区分小立方体 ax.voxels(data, facecolors=colors, edgecolors='grey') # 调整视角,让魔方显示更清晰 ax.view_init(elev=30, azim=45) plt.show()
关键说明:
facecolors的维度必须是(nx, ny, nz, 6, 4),最后一维是RGBA颜色值- 六个面的顺序是固定的,必须严格对应:
x-、x+、y-、y+、z-、z+ - 通过索引定位到魔方的外表面层,给对应立方体的对应面赋值颜色
- 内部面可以保留默认灰色,也可以根据需求调整
内容的提问来源于stack exchange,提问作者jacob_a26
相关产品推荐
相关产品推荐

