def plotLocallyWeightedLines(inputs,lines,lines_weighted,ax,n_samples_per_dim,activations_normalized=[],activations=[]): """Plots locally weighted lines, whilst being smart about the dimensionality of input data.""" n_dims = len(numpy.atleast_1d(inputs[0])) if (n_dims==1): #line_handles = ax.plot(inputs,lines, '-', color='#cccccc') line_handles = ax.plot(inputs,lines_weighted, '-', color='red') y_lim_min = min(lines_weighted) - 0.2*(max(lines_weighted)-min(lines_weighted)) y_lim_max = max(lines_weighted) + 0.2*(max(lines_weighted)-min(lines_weighted)) ax.set_ylim(y_lim_min,y_lim_max) if (len(activations_normalized)>0): ax_two = ax.twinx() line_handles_bfs = plotBasisFunctions(inputs,activations,ax_two,n_samples_per_dim) plt.setp(line_handles_bfs,color='#aaffaa') line_handles_bfs = plotBasisFunctions(inputs,activations_normalized,ax_two,n_samples_per_dim) plt.setp(line_handles_bfs,color='green') for tl in ax_two.get_yticklabels(): tl.set_color('green') ax_two.set_ylim(-2.0,3.0) for ii in xrange(len(activations_normalized[0])): active = activations_normalized[:,ii]>(max(activations_normalized[:,ii])*0.75) ax.plot(inputs[active],lines[active,ii], '-',color='#aaaaaa',linewidth='3') elif (n_dims==2): n_lines = len(lines[0]) # Have a look at the colormaps here and decide which one you'd like: # http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html colormap = plt.cm.Set3 colors = [colormap(i) for i in numpy.linspace(0, 0.9, n_lines)] inputs_0_on_grid = numpy.reshape(inputs[:,0],n_samples_per_dim) inputs_1_on_grid = numpy.reshape(inputs[:,1],n_samples_per_dim) if (len(activations)>0): for i_line in range(n_lines): cur_color = colors[i_line] cur_line = lines[:,i_line]; cur_activations = activations[:,i_line]; cur_line[cur_activations<0.4] = numpy.nan # Make plotting easier by leaving out small numbers line_on_grid = numpy.reshape(cur_line,n_samples_per_dim) line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=2,rstride=1, cstride=1, color=cur_color) line_on_grid = numpy.reshape(lines_weighted,n_samples_per_dim) line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=1,rstride=1, cstride=1, color="#333333") else: print 'Cannot plot input data with a dimensionality of '+str(n_dims)+'.' line_handles = [] return line_handles
def plotLocallyWeightedLines(inputs, lines, ax, n_samples_per_dim, activations=None, activations_unnormalized=None): """Plots locally weighted lines, whilst being smart about the dimensionality of input data.""" line_handles = [] n_dims = len(numpy.atleast_1d(inputs[0])) if (n_dims == 1): if not activations is None: ax_two = ax.twinx() # Plot basis functions if not activations_unnormalized is None: line_handles_bfs = plotBasisFunctions( inputs, activations_unnormalized, ax_two, n_samples_per_dim) plt.setp(line_handles_bfs, color='#aaffaa') line_handles_bfs = plotBasisFunctions(inputs, activations, ax_two, n_samples_per_dim) plt.setp(line_handles_bfs, color='green') for tl in ax_two.get_yticklabels(): tl.set_color('green') ax_two.set_ylim(-2.0, 3.0) # Plot line segements n_basis_functions = len(numpy.atleast_1d(activations[0])) if n_basis_functions == 1: active = activations > (max(activations) * 0.001) line_handles = ax.plot(inputs[active], lines[active], '--', color='#aaaaaa', linewidth=0.5) else: for ii in range(n_basis_functions): active = activations[:, ii] > (max(activations[:, ii]) * 0.0001) line_handles = ax.plot(inputs[active], lines[active, ii], '--', color='#aaaaaa', linewidth=1) elif (n_dims == 2): inputs_0_on_grid = numpy.reshape(inputs[:, 0], n_samples_per_dim) inputs_1_on_grid = numpy.reshape(inputs[:, 1], n_samples_per_dim) n_lines = len(lines[0]) # Have a look at the colormaps here and decide which one you'd like: # http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html colormap = plt.cm.Set1 shuffler = numpy.linspace(0, 0.9, n_lines) random.shuffle(shuffler) colors = [colormap(i) for i in shuffler] if (len(activations) > 0): min_val = numpy.amax(lines) for i_line in range(n_lines): cur_color = colors[i_line] cur_line = lines[:, i_line] cur_activations = activations[:, i_line] cur_line[ cur_activations < 0.25] = numpy.nan # Make plotting easier by leaving out small numbers line_on_grid = numpy.reshape(cur_line, n_samples_per_dim) line_handles = ax.plot_wireframe(inputs_0_on_grid, inputs_1_on_grid, line_on_grid, linewidth=0.5, rstride=1, cstride=1, color=cur_color) if numpy.nanmin(cur_line) < min_val: min_val = numpy.nanmin(cur_line) level = numpy.mean( [numpy.amin(activations), numpy.amax(activations)]) for i_line in range(n_lines): cur_color = colors[i_line] cur_activations = activations[:, i_line] acts_on_grid = numpy.reshape(cur_activations, n_samples_per_dim) cset = ax.contour(inputs_0_on_grid, inputs_1_on_grid, acts_on_grid, [level], zdir='z', offset=min_val, colors=[cur_color]) #line_on_grid = numpy.reshape(lines_weighted,n_samples_per_dim) #line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=1,rstride=1, cstride=1, color="#333333") else: print('Cannot plot input data with a dimensionality of ' + str(n_dims) + '.') line_handles = [] return line_handles
def plotLocallyWeightedLines(inputs,lines,ax,n_samples_per_dim,activations=None,activations_unnormalized=None): """Plots locally weighted lines, whilst being smart about the dimensionality of input data.""" line_handles = [] n_dims = len(numpy.atleast_1d(inputs[0])) if (n_dims==1): if not activations is None: ax_two = ax.twinx() # Plot basis functions if not activations_unnormalized is None: line_handles_bfs = plotBasisFunctions(inputs,activations_unnormalized,ax_two,n_samples_per_dim) plt.setp(line_handles_bfs,color='#aaffaa') line_handles_bfs = plotBasisFunctions(inputs,activations,ax_two,n_samples_per_dim) plt.setp(line_handles_bfs,color='green') for tl in ax_two.get_yticklabels(): tl.set_color('green') ax_two.set_ylim(-2.0,3.0) # Plot line segements n_basis_functions = len(numpy.atleast_1d(activations[0])); if n_basis_functions==1: active = activations>(max(activations)*0.001) line_handles = ax.plot(inputs[active],lines[active], '--',color='#aaaaaa',linewidth=0.5) else: for ii in xrange(n_basis_functions): active = activations[:,ii]>(max(activations[:,ii])*0.0001) line_handles = ax.plot(inputs[active],lines[active,ii], '--',color='#aaaaaa',linewidth=1) elif (n_dims==2): inputs_0_on_grid = numpy.reshape(inputs[:,0],n_samples_per_dim) inputs_1_on_grid = numpy.reshape(inputs[:,1],n_samples_per_dim) n_lines = len(lines[0]) # Have a look at the colormaps here and decide which one you'd like: # http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html colormap = plt.cm.Set1 shuffler = numpy.linspace(0, 0.9, n_lines) random.shuffle(shuffler) colors = [colormap(i) for i in shuffler] if (len(activations)>0): min_val = numpy.amax(lines) for i_line in range(n_lines): cur_color = colors[i_line] cur_line = lines[:,i_line]; cur_activations = activations[:,i_line]; cur_line[cur_activations<0.25] = numpy.nan # Make plotting easier by leaving out small numbers line_on_grid = numpy.reshape(cur_line,n_samples_per_dim) line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=0.5,rstride=1, cstride=1, color=cur_color) if numpy.nanmin(cur_line)<min_val: min_val = numpy.nanmin(cur_line) level = numpy.mean([numpy.amin(activations), numpy.amax(activations)]) for i_line in range(n_lines): cur_color = colors[i_line] cur_activations = activations[:,i_line]; acts_on_grid = numpy.reshape(cur_activations,n_samples_per_dim) cset = ax.contour(inputs_0_on_grid, inputs_1_on_grid, acts_on_grid, [level], zdir='z', offset=min_val, colors=[cur_color]) #line_on_grid = numpy.reshape(lines_weighted,n_samples_per_dim) #line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=1,rstride=1, cstride=1, color="#333333") else: print 'Cannot plot input data with a dimensionality of '+str(n_dims)+'.' line_handles = [] return line_handles