我试图在两个变量中绘制一个函数,在一组已知三角形上分段定义,或多或少像这样:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import random
def f( x, y):
if x + y < 1: return 0
else: return 1
x = [0, 1, 1, 0]
y = [0, 0, 1, 1]
tris = [[0, 1, 3], [1, 2,3]]
fig = plt.figure()
ax = fig.add_subplot( 121)
ax.triplot( x, y, tris)
xs = [random.random() for _ in range( 100)]
ys = [random.random() for _ in range( 100)]
zs = [f(xs[i], ys[i]) for i in range( 100)]
ax2 = fig.add_subplot( 122, projection='3d')
ax2.scatter( xs, ys, zs)
plt.show()
理想情况下,我会通过将三角形投影到轴 z=0 上将两个子图合并为一个。我知道这对于 2d 绘图的其他变体是可能的,但对于 triplot 则不行。有可能得到我想要的吗?
PS。这是我现在使用的实际实现的一个高度简化的版本,因此随机散射可能看起来有点奇怪。