def update(self): y = array(self.input.readings_dot) from procgraph_mpl import pylab2rgb, pylab if max(abs(y)) > 1: raise BadInput('I expect an input normalized in the [-1,1] range;' 'min,max: %s,%s ' % (min(y), max(y)), self, 'readings_dot') f = pylab.figure(frameon=False, figsize=(self.config.width / 100.0, self.config.height / 100.0)) R0 = self.config.R0 amp = self.config.amp theta = linspace(0, 2 * math.pi, 300) pylab.plot(R0 * cos(theta), R0 * sin(theta), 'k--') for group in self.config.groups: indices = group['indices'] indices = range(indices[0], indices[-1] + 1) theta_spec = group['theta'] origin = group.get('origin', [0, 0, 0]) color = group.get('color', 'b.') N = len(indices) theta = linspace(theta_spec[0], theta_spec[-1], N) group_y = y[indices] r = R0 + amp * group_y px = cos(theta + origin[2]) * r py = sin(theta + origin[2]) * r pylab.plot(-py, px, color) M = R0 + amp * 1.2 pylab.axis([-M, M, -M, M]) # turn off ticks labels, they don't have meaning pylab.setp(f.axes[0].get_xticklabels(), visible=False) pylab.setp(f.axes[0].get_yticklabels(), visible=False) if self.config.title is not None: if self.config.title != "": pylab.title(self.config.title, fontsize=10) else: # We don't have a title --- t = self.get_input_signals_names()[0] pylab.title(t, fontsize=10) self.output.image = pylab2rgb(transparent=self.config.transparent) pylab.close(f.number)
def update(self): R = self.arena_info['arena']['diameter'] / 2 cx = self.arena_info['arena']['origin'][0] # cy = self.arena_info['arena']['origin'][1] h = self.arena_info['arena']['height'] width = self.config.width ratio = h / (2 * R) height = ratio * width f = pylab.figure(frameon=False, figsize=(width / 100.0, height / 100.0)) plot_posts_xz(pylab, self.arena_info) position = array(self.input.position) x = position[:, 0] z = position[:, 2] xl = x[-1] zl = z[-1] pylab.plot(x, z, 'b.') # draw arena x = [cx - R, cx - R, cx + R, cx + R, cx - R] z = [0, h, h, 0, 0] pylab.plot(x, z, 'k-') aw = self.config.zoom_area ah = ratio * aw pylab.axis([ xl - aw , xl + aw, zl - ah, zl + ah]) # turn off ticks labels pylab.setp(f.axes[0].get_xticklabels(), visible=False) pylab.setp(f.axes[0].get_yticklabels(), visible=False) self.output.rgb = pylab2rgb(transparent=False, tight=True) pylab.close(f.number)
def update(self): position = array(self.input.position) R = self.arena_info['arena']['diameter'] / 2 cx = self.arena_info['arena']['origin'][0] # cy = self.arena_info['arena']['origin'][1] h = self.arena_info['arena']['height'] width = self.config.width height = h / (2 * R) * width f = pylab.figure(frameon=False, figsize=(width / 100.0, height / 100.0)) plot_posts_xz(pylab, self.arena_info) x = position[:, 0] z = position[:, 2] pylab.plot(x, z, 'b-') # draw arena x = [cx - R, cx - R, cx + R, cx + R, cx - R] z = [0, h, h, 0, 0] pylab.plot(x, z, 'k-') R *= 1.1 pylab.axis([-R + cx , R + cx, -0.05, h + 0.05]) # turn off ticks labels pylab.setp(f.axes[0].get_xticklabels(), visible=False) pylab.setp(f.axes[0].get_yticklabels(), visible=False) self.output.rgb = pylab2rgb(transparent=False, tight=True) pylab.close(f.number)
def update(self): position = array(self.input.position) f = pylab.figure(frameon=False, figsize=(self.config.width / 100.0, self.config.width / 100.0)) if self.arena_info: plot_posts_xy(pylab, self.arena_info) x = position[:, 0] y = position[ :, 1] pylab.plot(x, y, 'b-') R = self.arena_info['arena']['diameter'] / 2 cx = self.arena_info['arena']['origin'][0] cy = self.arena_info['arena']['origin'][1] # draw arena theta = numpy.linspace(0, numpy.pi * 2.01, 500) x = numpy.cos(theta) * R + cx y = numpy.sin(theta) * R + cy pylab.plot(x, y, 'k-') R *= 1.1 pylab.axis([-R + cx , R + cx, -R + cy, R + cy]) # turn off ticks labels pylab.setp(f.axes[0].get_xticklabels(), visible=False) pylab.setp(f.axes[0].get_yticklabels(), visible=False) self.output.rgb = pylab2rgb(transparent=False, tight=True) pylab.close(f.number)
def update(self): position = array(self.input.position) f = pylab.figure(frameon=False, figsize=(self.config.width / 100.0, self.config.width / 100.0)) plot_posts_xy(pylab, self.arena_info) x = position[:, 0] y = position[ :, 1] xc = x[-1] yc = y[-1] pylab.plot(x, y, 'b.') attitude = self.input.attitude fwd = numpy.dot(attitude, [1, 0, 0]) * self.config.arrow_length pylab.plot([xc, xc + fwd[0] ], [yc, yc + fwd[1]]) Z = self.config.zoom_area R = self.arena_info['arena']['diameter'] / 2 cx = self.arena_info['arena']['origin'][0] cy = self.arena_info['arena']['origin'][1] # draw arena theta = numpy.linspace(0, numpy.pi * 2.01, 500) x = numpy.cos(theta) * R + cx y = numpy.sin(theta) * R + cy pylab.plot(x, y, 'k-') pylab.axis([-Z + xc , Z + xc, -Z + yc, Z + yc]) # turn off ticks labels pylab.setp(f.axes[0].get_xticklabels(), visible=False) pylab.setp(f.axes[0].get_yticklabels(), visible=False) self.output.rgb = pylab2rgb(transparent=False, tight=True) pylab.close(f.number)
def update(self): readings = array(self.input.readings) if len(readings.shape) > 1: msg = 'Expected flat array, got shape %s' % str(readings.shape) raise BadInput(msg, self, 0) from procgraph_mpl import pylab, pylab2rgb f = pylab.figure(frameon=False, figsize=(self.config.width / 100.0, self.config.height / 100.0)) # limit the readings bounds = array([0, 0, 0, 0]) for group in self.config.groups: indices = group['indices'] indices = range(indices[0], indices[-1] + 1) theta_spec = group['theta'] origin = group.get('origin', [0, 0, 0]) color = group.get('color', 'b.') max_readings = group.get('max_readings', self.config.max_readings) group_readings = minimum(readings[indices], max_readings) N = len(indices) theta = linspace(theta_spec[0], theta_spec[-1], N) assert len(theta) == len(group_readings) x = cos(theta + origin[2]) * group_readings + origin[0] y = sin(theta + origin[2]) * group_readings + origin[1] valid_flag = group_readings < max_readings valid, = nonzero(valid_flag) invalid, = nonzero(logical_not(valid_flag)) pylab.plot(-y[valid], x[valid], color) pylab.plot(-y[invalid], x[invalid], 'r.') R = max_readings * 1.1 x_R = R * cos(theta) y_R = R * sin(theta) group_bounds = array([min(x_R), max(x_R), min(y_R), max(y_R)]) for i in [1, 3]: bounds[i] = maximum(bounds[i], group_bounds[i]) for i in [0, 2]: bounds[i] = minimum(bounds[i], group_bounds[i]) pylab.axis(bounds) if self.config.title is not None: if self.config.title != "": pylab.title(self.config.title, fontsize=10) else: # We don't have a title --- t = self.get_input_signals_names()[0] pylab.title(t, fontsize=10) self.output.image = pylab2rgb(transparent=self.config.transparent) #tight=True) pylab.close(f.number)
def plot_posts_xz(pylab, info): for post in info['posts']: p1 = post['verts'][0] p2 = post['verts'][1] pylab.plot([p1[0], p2[0]], [p1[2], p2[2]], 'k-', linewidth=3)