我正在进行一些优化的线性编程,我需要根据优化函数的值在表面上使用不同的颜色来呈现数据。优化的函数需要传入所有三个x,y,z坐标,因此基本上我需要为凹面3D多面体着色的表面。墙壁也可以是垂直的。我目前的做法是这样的:
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as a3
import scipy as sp
import numpy as np
from matplotlib import colors
verts = [(0, 0, 0), (1, 1, 1), (0, 1, 0), (1, 0, 0)]
faces = [[0, 1, 2], [0, 1, 3]]
ax = a3.Axes3D(plt.figure())
ax.dist = 30
ax.azim = -140
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ax.set_zlim([0, 1])
for face in faces:
triangle = verts[face[0]], verts[face[1]], verts[face[2]]
face = a3.art3d.Poly3DCollection([triangle])
face.set_color(colors.rgb2hex(sp.rand(3)))
ax.add_collection3d(face)
plt.show()
但这只允许我为脸部设置一种颜色。我的概念是通过简单地增加每个墙上的多边形数量来实现它,但是没有更简单的方法,例如将3d函数传递给绘图,该绘图将颜色映射到基于所有三个坐标的点(我见过仅使用x和y参数的colormaps示例,但它不会相应地处理垂直墙。