如果可以生成要绘制任意比例轮廓的数据,则有一种解决方法。在这种情况下,您可以在网格上生成(x,y)数据,将它们映射到重心坐标,并计算z值。然后您可以使用非三元图,如轮廓或曲面。在
下面是一个绘制Dirichlet分布密度函数的示例:import plotly as py
import plotly.graph_objs as go
import numpy as np
def compute_in_barycentric_coordinates(a, b, c):
epsilon = 1e-6
if 0.0 < a < 1.0 and 0.0 < b < 1.0 and 0.0 < c < 1.0 and abs(a + b + c - 1.0) < epsilon:
return pow(a, 2) * pow(b, 1.5) * pow(c, 1.8)
return None
x_data = np.linspace(0, 1, 101)
y_data = np.linspace(0, 1, 101)
z_data = []
f = 1.0 / pow(3.0, 0.5)
for y in y_data:
next_slice = []
for x in x_data:
a = 1 - x - f*y
b = x - f*y
c = 2*f*y
z = compute_in_barycentric_coordinates(a, b, c)
next_slice.append(z)
z_data.append(next_slice)
data = [
go.Contour(
x=x_data,
y=y_data,
z=z_data,
)
]
py.offline.plot(data)
不过,这仍然是一个解决办法,所以如果你有更好的想法,我将非常高兴听到你的消息。在