Matplotlib-在三角形区域上绘制

时间:2019-12-14 21:23:38

标签: python matplotlib

我无法弄清楚如何在matplotlib中的三角形区域上定义图。那是我的第一个问题。

作为一种解决方法,我想使用条件表达式来定义函数,以避免未定义函数的问题。

def f(x,y):
    for a in x:
        for b in y:
            if a>b:
                g = log(a-b)
            else:
                g = 0
     return  

 x = np.linspace(0.1, 1000, 30)
 y = np.linspace(0.1, 3, 30)

 X, Y = np.meshgrid(x, y)
 Z = f(X, Y)

但是我收到错误消息

ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

这至少使我了解了(某种)meshgrid的功能。

总结:

1)在三角形上绘制函数的最巧妙的方法是什么?

2)在网格网格上进行绘制有什么好处,而不是将单个数组定义为[[X1,Y1],[X1,Y2],...,[X1,YN],[X2,Y1] ,[X2,Y2],..)?

非常感谢

1 个答案:

答案 0 :(得分:2)

您遇到的问题是对NumPy数组使用普通的Python函数。这并不总是能按预期工作,特别是当您使用诸如<之类的条件时。您可以将f简化为:

import math
def f(x,y):
    if x > y:
        return math.log(x-y)
    else:
        return 0.0  # or math.nan

,然后使用ufunc从中生成一个小数np.frompyfunc

f_np = np.frompyfunc(f,2,1)

现在您可以这样做:

Z = f_np(X,Y)

注意:如果您打算使用plt.contourf(X,Y,Z),那么如果使用y = np.linspace(0.1, 1000, 30)而不是y = np.linspace(0.1, 3, 30),则所有内容都会更清晰,这样 triangle 恰好是情节。如果您在math.nan中使用f而不是0.0,则三角形将在轮廓图中保持空白