Import things for graphing...
In [2]:
#%pylab inline
from operator import itemgetter
#from JSAnimation import IPython_display
from matplotlib import animation
from collections import Counter, OrderedDict
from scipy.spatial import distance
import matplotlib.patches as patches
Make some simple geometric functions for readability...
In [2]:
getX = lambda point: point[0]
getY = lambda point: point[1]
#sort = lambda dictionary: sorted(dictionary.items(), key=itemgetter(0))
in_rectangle = lambda point, grid: getX(grid[0]) < getX(point) < getX(grid[1]) and \
getY(grid[0]) < getY(point) < getY(grid[1])
grid_array = lambda: zeros(shape=((getX(grid[1]) - getX(grid[0])) / res, (getY(grid[1]) - getY(grid[0])) / res), dtype=float64)
And some data processing stuff as well...
In [1]:
normalize = lambda data: [float(datum) / sum(data) for datum in data]
weighted_average = lambda data: average(distances, weights=data)
nearest = lambda value: min(int(value / interval), int(max_distance / interval) - 1)
In [1]:
def time_point(x_func, y_func, t_values):
fig = plt.figure()
ax = plt.axes(xlim=zip(*grid)[0], ylim=zip(*grid)[1])
path = ax.scatter([], [])
def init():
path.set_offsets([[]])
return path,
def animate(i):
t = t_values[i]
x = x_func(t)
y = y_func(t)
path.set_offsets([[x, y]])
return path,
return animation.FuncAnimation(fig, animate, init_func=init, frames=len(t_values), interval=20, blit=True)
def bar_chart1(data):
plt.figure()
plt.title('Signal strength by distance')
plt.xlabel('distance (in meters)'.format(interval))
plt.ylabel('signal strength (normalized to 1)')
plt.xlim(0, max_distance)
plt.bar(distances, data, width=interval, linewidth=0)
plt.show()
def visualize_circles(circles, points, ccolors, pcolors):
plt.figure()
ax = plt.axes(xlim=zip(*grid)[0], ylim=zip(*grid)[1], aspect='equal')
for (center, radius), color in zip(circles, ccolors):
ax.add_patch(patches.Circle(center, radius, fill=False, ls='solid',
lw=1.0, edgecolor=color))
for point, color in zip(points, pcolors):
ax.add_patch(patches.Circle(point, 0.1, fill=False, ls='solid',
lw=4.0, edgecolor=color))
plt.show()
def heatmap1(data):
plt.figure(figsize=(10, 2))
ax1 = plt.subplot(211)
plt.title('Signal strength by distance')
plt.xlim(0, max_distance)
plt.bar(distances, data, width=interval, linewidth=0)
height = 10
ax2 = plt.subplot(212, sharex=ax1)
d = [data] * height
ax2.imshow(d, interpolation='none', extent=[0, max_distance, 0, height])
plt.show()
def heatmap2(f, title):
Z = grid_array()
for x in range(len(Z)):
for y in range(len(Z[0])):
Z[x][y] = f(x * res, y * res)
plt.figure()
ax = plt.axes(aspect='equal')
ax.imshow(Z.T, origin='lower', interpolation='none',
extent=[grid[0][0], grid[1][0], grid[0][1], grid[1][1]])
plt.title(title)
plt.show()
def heatmap3(a, b, titlea, titleb, targets):
Za = grid_array()
Zb = grid_array()
for x in range(len(Za)):
for y in range(len(Za[0])):
Za[x][y] = a(x * res, y * res)
Zb[x][y] = b(x * res, y * res)
plt.figure(1, figsize=(9, 9))
axa = plt.subplot(121, aspect='equal')
axa.imshow(Za.T, origin='lower', interpolation='none', #cmap='Greys',
extent=[grid[0][0], grid[1][0], grid[0][1], grid[1][1]])
axa.set_xticks(numpy.arange(grid[0][0], grid[1][0], 1))
axa.set_yticks(numpy.arange(grid[0][1], grid[1][1], 1))
axa.plot(targets.T[0], targets.T[1], 'gx', markersize=25.0)
plt.grid()
plt.title(titlea)
axb = plt.subplot(122, aspect='equal')
axb.imshow(Zb.T, origin='lower', interpolation='none', #cmap='Greys',
extent=[grid[0][0], grid[1][0], grid[0][1], grid[1][1]])
axb.set_xticks(numpy.arange(grid[0][0], grid[1][0], 1))
axb.set_yticks(numpy.arange(grid[0][1], grid[1][1], 1))
axb.plot(targets.T[0], targets.T[1], 'wx', markersize=25.0)
plt.grid()
plt.title(titleb)