I need to contourplot one huge expression which is:
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))))
which is not so much relevant here.
Usually the task is trivial and can be done this way:
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()
which is okay, but I have an issue I cannot handle.
The problem is that I need to plot it assuming that my y is not a simple array and the upperlimit is variable and must obey
y = 0.1 cos(x). So, x=0..6 and y = 0.1 cos(x)
In that case the result has to be
I do not know how to achieve this. So, how to contourplot with variable upper limit? I hope I stated my problem clear.
Any help will be greatly appreciated!
Thank you very much in advance!
Advertisement
Answer
You could use a masked array in order to mask AA
value where a specific condition is met, in your case y > 0.1*cos(x)
.
So, from AA
you can get:
AA_masked = np.ma.array(AA.real, mask = (y > 0.1*cos(x)))
And then you can plot it:
CS = ax.contour(x, y, AA_masked.real) ax.clabel(CS, inline=True, fontsize=10)
As a check you can also plot the specific threshold:
x_threshold = np.linspace(0, 6, 1000) y_threshold = 0.1*np.cos(x_threshold) ax.plot(x_threshold, y_threshold, linestyle = '--', color = 'red')
Complete Code
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()