【问题标题】:Matplotlib with variable upper limit具有可变上限的 Matplotlib
【发布时间】:2022-01-05 13:13:34
【问题描述】:

我需要等高线绘制一个巨大的表达式:

I = 1j  # imaginary unit
Psi = (0.1743261076e-2-0.1743261076e-2*I)*sin(x)*((1.318639968*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y-(.6752336213*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))*y-1.*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*exp((0.7071067812e-1*I)*cos(x)+1.414213562+.7071067812*I+0.7071067812e-1*cos(x))-(3.887320974*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-(3.321756325*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*exp(-(0.7071067812e-1*I)*cos(x)-.7071067812*I-0.7071067812e-1*cos(x))+(4.022439224*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y+(4.178862074*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))*y-(2.366831780*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))-(2.022482447*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-(.6752336213*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+(4.022439224*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+(4.178862074*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))+(1.318639968*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-4.022439224*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))*y+1.318639968*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))*y-4.178862074*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y-.6752336213*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y-4.178862074*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-.6752336213*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+1.318639968*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-4.022439224*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+2.022482447*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-3.887320974*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-2.366831780*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+3.321756325*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x)))/(cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*(.9583581328*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-.8189270221*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+(.8189270221*I)*sinh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))+(.9583581328*I)*sinh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+.5835053242*sinh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-.4986113867*sinh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+(.4986113867*I)*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))+(.5835053242*I)*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))))

这在这里不太相关。

通常任务是微不足道的,可以这样完成:

import numpy as np
from numpy import sqrt, cos, sin, sinh, cosh
import matplotlib
from matplotlib import pyplot as plt
delta = 0.025
X = np.arange(0, 6, delta)
Y = np.arange(-1, 0.2, delta)
x, y = np.meshgrid(X, Y)
# AA = that huge expression 
fig, ax = plt.subplots() 
plt.xlabel(r'x')
plt.ylabel(r'y')
CS = ax.contour(x, y, AA.real)
ax.clabel(CS, inline=True, fontsize=10)
plt.show()

所有共同点产生

没关系,但我有一个无法处理的问题。

问题是我需要假设我的 y 不是一个简单的数组并且上限是可变的并且必须服从来绘制它

y = 0.1 cos(x). 
So, x=0..6 and y = 0.1 cos(x)

在这种情况下,结果必须是

我不知道如何实现这一点。那么,如何绘制具有可变上限的等高线图?我希望我把我的问题说清楚了。

任何帮助将不胜感激!

非常感谢您!

【问题讨论】:

    标签: python numpy matplotlib data-visualization contour


    【解决方案1】:

    您可以使用屏蔽数组来屏蔽满足特定条件的AA 值,在您的情况下为y > 0.1*cos(x)
    所以,从AA你可以得到:

    AA_masked = np.ma.array(AA.real, mask = (y > 0.1*cos(x)))
    

    然后你可以绘制它:

    CS = ax.contour(x, y, AA_masked.real)
    ax.clabel(CS, inline=True, fontsize=10)
    

    作为检查,您还可以绘制特定阈值:

    x_threshold = np.linspace(0, 6, 1000)
    y_threshold = 0.1*np.cos(x_threshold)
    ax.plot(x_threshold, y_threshold, linestyle = '--', color = 'red')
    

    完整代码

    import numpy as np
    from numpy import sqrt, cos, sin, sinh, cosh, exp
    from matplotlib import pyplot as plt
    
    
    delta = 0.025
    X = np.arange(0, 6, delta)
    Y = np.arange(-1, 0.2, delta)
    x, y = np.meshgrid(X, Y)
    I = 1j  # imaginary unit
    AA = (0.1743261076e-2-0.1743261076e-2*I)*sin(x)*((1.318639968*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y-(.6752336213*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))*y-1.*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*exp((0.7071067812e-1*I)*cos(x)+1.414213562+.7071067812*I+0.7071067812e-1*cos(x))-(3.887320974*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-(3.321756325*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*exp(-(0.7071067812e-1*I)*cos(x)-.7071067812*I-0.7071067812e-1*cos(x))+(4.022439224*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y+(4.178862074*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))*y-(2.366831780*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))-(2.022482447*I)*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-(.6752336213*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+(4.022439224*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+(4.178862074*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))+(1.318639968*I)*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-4.022439224*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))*y+1.318639968*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))*y-4.178862074*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y-.6752336213*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))*y-4.178862074*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-.6752336213*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+1.318639968*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-4.022439224*cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+2.022482447*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*sin(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))-3.887320974*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-2.366831780*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cos(0.7071067812e-1*cos(x))*sinh(0.7071067812e-1*cos(x))+3.321756325*sinh(.7071067812*y+(.7071067812*I)*y-0.7071067812e-1*cos(x)-(0.7071067812e-1*I)*cos(x))*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x)))/(cosh((0.7071067812e-1+0.7071067812e-1*I)*(10.+cos(x)))*(.9583581328*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-.8189270221*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+(.8189270221*I)*sinh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))+(.9583581328*I)*sinh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+.5835053242*sinh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))-.4986113867*sinh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))+(.4986113867*I)*cosh(0.7071067812e-1*cos(x))*cos(0.7071067812e-1*cos(x))+(.5835053242*I)*cosh(0.7071067812e-1*cos(x))*sin(0.7071067812e-1*cos(x))))
    
    
    fig, ax = plt.subplots()
    
    AA_masked = np.ma.array(AA.real, mask = (y > 0.1*cos(x)))
    CS = ax.contour(x, y, AA_masked.real)
    ax.clabel(CS, inline=True, fontsize=10)
    
    x_threshold = np.linspace(0, 6, 1000)
    y_threshold = 0.1*np.cos(x_threshold)
    ax.plot(x_threshold, y_threshold, linestyle = '--', color = 'red')
    
    ax.set_xlabel(r'x')
    ax.set_ylabel(r'y')
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2018-08-24
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2018-11-02
      相关资源
      最近更新 更多