56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from plt_util import plt_config, plt_export
|
|
import matplotlib.pyplot as plt
|
|
from matplotlib.patches import FancyArrowPatch
|
|
import matplotlib.ticker as ticker
|
|
import numpy as np
|
|
|
|
plt_config(plt)
|
|
|
|
## Initiate test plot data
|
|
x = np.linspace(0, 10, 14)
|
|
|
|
# -- bounds
|
|
upper_bound = np.ones_like(x) * 4.5
|
|
lower_bound = upper_bound * 0.4
|
|
|
|
# -- lines
|
|
method_1_1 = upper_bound - (upper_bound - lower_bound) * np.exp(-0.7 * x)
|
|
method_1_2 = upper_bound - (upper_bound - lower_bound) * np.exp(-0.5 * x)
|
|
method_1_3 = upper_bound - (upper_bound - lower_bound) * np.exp(-0.3 * x)
|
|
method_2 = upper_bound - (upper_bound - lower_bound) * np.exp(-0.5 * x) * np.cos(x)
|
|
|
|
|
|
## Plot
|
|
x_min, x_max = 0, 10
|
|
y_min, y_max = 2, 6
|
|
plt.plot(x, upper_bound, 'k-', label='Optimal')
|
|
plt.plot(x, method_1_1, '^b-', label='Method 1')
|
|
plt.plot(x, method_1_2, '^b--')
|
|
plt.plot(x, method_1_3, '^b-.')
|
|
plt.plot(x, method_2, '*r-', label='Method 2')
|
|
plt.xlim(x_min, x_max)
|
|
plt.ylim(y_min, y_max)
|
|
plt.grid(True, linestyle='--', color='gray', linewidth=0.5)
|
|
|
|
# -- Add arrow
|
|
arrow = FancyArrowPatch((2.5, 4.2), # start point
|
|
(3.8, 3), # end point
|
|
arrowstyle='-|>', # arrow style
|
|
mutation_scale=10, # arrow head size
|
|
color='black', # arrow color
|
|
linewidth=0.5) # line width
|
|
plt.gca().add_patch(arrow)
|
|
plt.text(4, 3, '$\gamma = 1, 2, 3$')
|
|
|
|
# -- Add legends and labels
|
|
plt.legend()
|
|
plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(1))
|
|
plt.gca().yaxis.set_major_locator(ticker.MultipleLocator(1))
|
|
plt.ylabel(r"$\mathbb{E}\left[S\right]$")
|
|
plt.xlabel(r'Rounds of Iteration')
|
|
|
|
# -- export and show
|
|
plt_export(filename='example_python.pdf',
|
|
folder='../../images',
|
|
format='pdf')
|
|
plt.show() |