Python matplotlib等高线图中的条件函数更改

Python matplotlib等高线图中的条件函数更改,python,numpy,matplotlib,conditional-statements,contourf,Python,Numpy,Matplotlib,Conditional Statements,Contourf,我想使用一个2变量函数ZX,Y生成一个等高线图。但是,我想施加一个条件,当X小于/大于某个值时,改变函数。这样的更改将允许我只使用一条单独的plt.等高线,即我不想创建两个单独定义的函数,这将导致使用两个单独的绘图命令行。 我继续遇到我认为是真理/逻辑错误的事情。我猜numpy meshgrid的某些方面不符合函数的条件切换。下面是显示该概念的简短代码,以及完整的回溯错误。如果有任何不清楚的地方,或者如果我提供的不足以解释我的问题,请随时在下面发表评论 import numpy as np im

我想使用一个2变量函数ZX,Y生成一个等高线图。但是,我想施加一个条件,当X小于/大于某个值时,改变函数。这样的更改将允许我只使用一条单独的plt.等高线,即我不想创建两个单独定义的函数,这将导致使用两个单独的绘图命令行。 我继续遇到我认为是真理/逻辑错误的事情。我猜numpy meshgrid的某些方面不符合函数的条件切换。下面是显示该概念的简短代码,以及完整的回溯错误。如果有任何不清楚的地方,或者如果我提供的不足以解释我的问题,请随时在下面发表评论

import numpy as np
import matplotlib.pyplot as plt


X = np.linspace(0,50,100)
Y = np.linspace(0,50,100)
X, Y = np.meshgrid(X,Y)


def z(x,y):

    if x < 20:
        return np.sin(x) + np.cos(y)
    
    else:
        return np.tan(x * y)


Z = z(X,Y)


plt.contourf(X, Y, Z)
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar()

一切正常,但你必须改变np上的比较。anyx一切正常,但你必须改变np上的比较。在numpy数组中,anyx真值测试是按元素进行的

将numpy作为np导入 X=np.数组[1,2,3,4]
numpy数组中的printX真值测试是按元素进行的

将numpy作为np导入 X=np.数组[1,2,3,4] printX您可以简单地使用。 你必须通过:

作为第一个参数的条件 如果该条件作为第二个参数为真,则要从中选择的值 如果该条件作为第三个参数为false,则要从中选择的值 这样,z函数就变成:

def z(x, y):
    return np.where(x < 20,
                    np.sin(x) + np.cos(y),
                    np.tan(x*y))
生成的绘图:

你可以简单地使用。 你必须通过:

作为第一个参数的条件 如果该条件作为第二个参数为真,则要从中选择的值 如果该条件作为第三个参数为false,则要从中选择的值 这样,z函数就变成:

def z(x, y):
    return np.where(x < 20,
                    np.sin(x) + np.cos(y),
                    np.tan(x*y))
生成的绘图:


非常感谢。虽然,在考虑是否应该使用np.allx时,我遇到了一些困难考虑一下这个例子,如果数组的anynp.any元素>0->true,如果数组的所有np.all元素>0->在下面的例子中,false np.anynp.asarray[[1,0,4],-3,4,-2]>0 true np.allnp.asarray[[1,0,4],-3,4,-2]>0 false谢谢!虽然,在考虑是否应该使用np.allx时,我遇到了一些困难考虑这个例子,如果数组的anynp.any元素>0->true,如果数组的所有np.all元素>0->在下面的例子中,false np.anynp.asarray[[1,0,4],-3,4,-2]>0 true np.allnp.asarray[[1,0,4],-3,4,-2]>0 false
print((X<3).all())
def z(x, y):
    return np.where(x < 20,
                    np.sin(x) + np.cos(y),
                    np.tan(x*y))