-
Notifications
You must be signed in to change notification settings - Fork 0
/
visualize.py
73 lines (61 loc) · 2.14 KB
/
visualize.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
"""
This module renders visualizations of statistics obtained from experiment.py
"""
import os
from typing import Callable, List, Tuple, Union
import matplotlib.pyplot as plt
import numpy as np
def show_plot(points: List[Tuple[Union[int, float], float]], save: bool=False, name: str="plot", xlabel: str="",
ylabel: str=""):
"""
Show a scatter plot of the given points.
"""
x, y = zip(*points)
plt.xticks(x), plt.xlabel(xlabel), plt.ylabel(ylabel) # formatting
plt.scatter(x, y)
if save:
if not os.path.isdir("imgs"):
os.mkdir("imgs")
plt.savefig("imgs/" + name + ".png")
plt.show()
def show_freq_hist(vals: List[int], save: bool=False, name: str="plot", xlabel: str="", ylabel: str=""):
"""
Plots a (normalized) frequency histogram
"""
plt.xticks([4 * i for i in range(max(vals) + 1)])
plt.xlabel(xlabel), plt.ylabel(ylabel) # formatting
# credit to https://stackoverflow.com/questions/9767241/setting-a-relative-frequency-in-a-matplotlib-histogram
plt.hist(vals, bins=max(vals) - min(vals), weights=np.zeros_like(vals) + 1 / len(vals))
if save:
if not os.path.isdir("imgs"):
os.mkdir("imgs")
plt.savefig("imgs/" + name + ".png")
plt.show()
def show_trajectories(trajectories):
"""
Plots average trajectories.
"""
for trajectory in trajectories:
pass
def draw_function(f: Callable[[np.ndarray], float], save: bool=True, name: str="", clear_plot: bool=True):
"""
Plot a smooth curve of the 1D function <f>.
"""
if clear_plot:
plt.clf()
x = np.linspace(-10, 10, 1000)
plt.plot(x, f(x))
if save:
if not os.path.isdir("imgs"):
os.mkdir("imgs")
plt.savefig("imgs/" + name + ".png")
def draw_step_and_sigmoid():
"""
Plot a smooth curve of the sigmoid and step function on the same figure.
"""
draw_function(f=lambda x: 1 / (1 + np.exp(-x)),
save=False)
draw_function(f=lambda x: np.abs(x) / (2 * x) + 1 / 2,
save=True,
name="step and sigmoid",
clear_plot=False)