-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot_piecewise_switch.py
113 lines (94 loc) · 3.33 KB
/
plot_piecewise_switch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"""
This script provides functions for plotting the activation
functions used in the models of the UPR.
Written by Wylie Stroberg in 2018
"""
import numpy as np
import matplotlib as mpl
mpl.use('TkAgg')
mpl.rc('axes', linewidth=3)
import matplotlib.pyplot as plt
#----------------------------------------------------------------------
def piecewise_linear_Uswitch(x,m):
if(x<=0.0):
return 0.0
elif(x>=1.0/m):
return 1.0
else:
return x*m
#----------------------------------------------------------------------
def piecewise_linear_Cfswitch(x,m):
if(x>=0.0):
return 0.0
elif(x<=-1.0/m):
return 1.0
else:
return -x*m
#----------------------------------------------------------------------
def plot_switch(xcrit,m,**kwargs):#Xrange=(1,10),switch_func=piecewise_linear_Uswitch,axis=None,color='b'):
# Default kwargs
X = np.linspace(0,10,1000)
switch_func=piecewise_linear_Uswitch
axis=None
color='blue'
# Parse kwargs
if 'x' in kwargs:
X = kwargs['x']
if 'switch' in kwargs:
switch_func = kwargs['switch']
if 'axis' in kwargs:
ax = kwargs['axis']
if 'color' in kwargs:
color = kwargs['color']
# Plot switch function
if axis==None:
fig,ax = plt.subplots(1,1)
else:
ax = axis
g = [switch_func(Xi-xcrit,m) for Xi in X]
p = ax.plot(X,g,linewidth=3,color=color)
#------- Axis and Figure Adjustments ----------#
#ax.set_xlabel(r'$U/U_{ss}$',fontsize=18)
#ax.set_ylabel(r'$G\left(U\right))/G_{0}$',fontsize=18)
# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
# To specify the number of ticks on both or any single axes
ax.locator_params(axis='y', nbins=2)
ax.locator_params(axis='x', nbins=int(X[-1]))
# Change strings for y ticklabels
ylabels = [item.get_text() for item in ax.get_yticklabels()]
ylabels[1:3] = ['0',r'$G_{0}$']
ax.set_yticklabels(ylabels)
# We change the fontsize of minor ticks label
ax.tick_params(axis='both', which='major', labelsize=20)
# Change strings for x ticklabels
ax.set_xticks((X[0],X[-1]))
label_text = ['' for i in ax.get_xticks()]
#label_text[0] = r"${:.1f} \cdot 10^5$".format( ax.get_xticks()[0]/10**5)
#label_text[-1] = r"${:.1f} \cdot 10^5$".format( ax.get_xticks()[-1]/10**5)
label_text[0] = r"${:.1f}$".format( ax.get_xticks()[0])
label_text[-1] = r"${:.1f}$".format( ax.get_xticks()[-1])
ax.set_xticklabels(label_text)
#fig.tight_layout()
if axis==None:
return fig, ax
else:
return
#----------------------------------------------------------------------
#----------------------------------------------------------------------
if __name__=="__main__":
# switch function parameters
ubar = 2.#e5
m = 1.0
U = np.linspace(0,10,100)
cmax=2.0
Cf = np.linspace(0,10,100)
figU, axU = plot_switch(ubar,m,x=U,switch=piecewise_linear_Uswitch)
figCf, axCf = plot_switch(ubar,m,x=Cf,switch=piecewise_linear_Cfswitch)
figname = './Figures/switch_functions/piecewise_ubar_{:.1}_m_{:}.eps'.format(ubar,m)
#fig.savefig(figname)
plt.show()