我无法弄清楚如何在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],..)?
非常感谢
答案 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,则三角形将在轮廓图中保持空白。