Matplotlib challenge - changing line style in contour map
I would like to use numping boolean indexing to plot only the scopes of a function in which I have a specific mets sigma <0 condition like in the code below. When I try to use numping boolean indexing like change_line_style in this example , I get a TypeError. Is there a way to use numpy boolean indexing to plot only certain areas using an outline function?
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('text', usetex=True)
plt.figure()
plt.ylim([-2,2])
plt.xlim([-0.5,0.5])
plt.xlabel(r'\lambda')
plt.ylabel(r'u')
lambda_x = np.linspace(-0.5,0.5,1000)
u = np.linspace(-2,2,1000)
X,Y = np.meshgrid(lambda_x,u)
# Drawing f=0 lines for implicit function f(u;lambda) = lambda*u + u**3 - u**5
f1 = X + Y**2 - Y**4
f2 = Y
sigma = X + 3*Y**2 - 5*Y**4
stable = sigma < 0
#plt.setp(zc, linewidth=4)
print stable.shape
print f1.shape
plt.contour(X[stable],Y[stable], f1[stable], levels = [0],colors = ('r'),linewidths = 4,extend='both')
plt.contour(X[stable],Y[stable], f2[stable], levels = [0],colors = ('b'),linewidths = 4,extend='both')
plt.show()
+3
source to share
1 answer
Got it!
I used numpy.ma.masked_where () function like in this code snippet:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('text', usetex=True)
plt.figure()
plt.ylim([-2,2])
plt.xlim([-0.5,0.5])
lambda_x = np.linspace(-0.5,0.5,1000)
u = np.linspace(-2,2,1000)
X,Y = np.meshgrid(lambda_x,u)
# Drawing f=0 lines for implicit function f(u;lambda) = lambda*u + u**3 - u**5
f1 = X + Y**2 - Y**4
f2 = Y
sigma = X + 3*Y**2 - 5*Y**4
unstable = sigma > 0
stable = sigma < 0
#for i in range(0,10):
#f1[i] = f1[i][stable[i]]
plt.contour(np.ma.masked_where(unstable, X),np.ma.masked_where(unstable, Y), np.ma.masked_where(unstable, f1), levels = [0],colors = ('r'),linewidths = 4,extend='both')
plt.contour(np.ma.masked_where(stable, X),np.ma.masked_where(stable, Y), np.ma.masked_where(stable, f1), levels = [0],colors = ('b'),linewidths = 4,linestyles = 'dashed',extend='both')
plt.contour(np.ma.masked_where(unstable, X),np.ma.masked_where(unstable, Y), np.ma.masked_where(unstable, f2), levels = [0],colors = ('r'),linewidths = 4,extend='both')
plt.contour(np.ma.masked_where(stable, X),np.ma.masked_where(stable, Y), np.ma.masked_where(stable, f2), levels = [0],colors = ('b'),linewidths = 4,linestyles = 'dashed',extend='both')
plt.show()
+1
source to share