def plotDocUsageForProposal(docUsageByUID, savefilename=None, **kwargs): ''' Make trace plot of doc usage for each component. ''' pylab.figure() L = 0 maxVal = 0 for k, uid in enumerate(docUsageByUID): ys = np.asarray(docUsageByUID[uid]) xs = np.arange(0, ys.size) if k < 6: # only a few labels fit well on a legend pylab.plot(xs, ys, label=uid) else: pylab.plot(xs, ys) L = np.maximum(L, ys.size) maxVal = np.maximum(maxVal, ys.max()) # Use big chunk of left-hand side of plot for legend display xlims = np.asarray([-0.75*L, L-0.5]) pylab.xlim(xlims) pylab.xticks(np.arange(1, L)) pylab.ylim([0, 1.1*maxVal]) pylab.xlabel('num proposal steps') pylab.ylabel('num docs using each comp') pylab.legend(loc='upper left', fontsize=12) pylab.subplots_adjust(left=0.2) if savefilename is not None: pylab.savefig(savefilename, pad_inches=0) pylab.close('all')
def makePlot(muVals=[(0.01,0), (0.1,0), (1,0), (10,0)], doCorrection=1): pylab.figure() xgrid = np.linspace(-8, 8, 2000) pylab.hold('on') pylab.plot(xgrid, np.zeros_like(xgrid), ':', alpha=0.2) for mu1, mu2 in muVals: ygrid = calcBregDiv_Gauss1D(xgrid, mu1, mu2, doCorrection=doCorrection) print ygrid.min() pylab.plot(xgrid, ygrid, label='mu1=% 6.2f mu2=% 6.2f' % (mu1, mu2)) pylab.legend(loc='lower right') pylab.xlim([xgrid.min(), xgrid.max()]) pylab.ylim([xgrid.min(), xgrid.max()]) pylab.xlabel('x') if doCorrection: pylab.ylabel('D(x, \mu) + correction') else: pylab.ylabel('D(x, \mu)')
def makePlot(muVals=[0.01, 0.1, 1, 10], B=1e-10, nu=2, justMahalTerm=0): pylab.figure() xgrid = np.linspace(0, 8, 2000) pylab.hold('on') for mu in muVals: ygrid = calcBregDiv_ZeroMean(xgrid, mu, B=B, nu=nu, justMahalTerm=justMahalTerm) pylab.plot(xgrid, ygrid, linewidth=2, label='\mu=%6.2f' % (mu)) pylab.legend(loc='upper right') pylab.xlim([-0.1, xgrid.max()]) pylab.ylim([-0.1, xgrid.max()]) pylab.xlabel('x') pylab.ylabel('D(x, \mu)') pylab.title('B=%s nu=%s' % (str(B), str(nu)))
def plotJobs(jpaths, legNames, styles=None, density=2, xvar='laps', yvar='evidence', loc='upper right', xmin=None, xmax=None, taskids=None, savefilename=None, tickfontsize=None, bbox_to_anchor=None, **kwargs): ''' Create line plots for provided jobs. ''' nLines = len(jpaths) if nLines == 0: raise ValueError('Empty job list. Nothing to plot.') nLeg = len(legNames) for lineID in range(nLines): if styles is None: curStyle = dict(colorID=lineID) else: curStyle = styles[lineID] task_kwargs = dict(**kwargs) task_kwargs.update(curStyle) plot_all_tasks_for_job(jpaths[lineID], legNames[lineID], xvar=xvar, yvar=yvar, taskids=taskids, density=density, **task_kwargs) # Y-axis limit determination # If we have "enough" data about the run beyond two full passes of dataset, # we zoom in on the region of data beyond lap 2 if xvar == 'laps' and yvar == 'evidence': xmax = 0 ymin = np.inf ymin2 = np.inf ymax = -np.inf allRunsHaveXBeyond1 = True for line in pylab.gca().get_lines(): xd = line.get_xdata() yd = line.get_ydata() if xd.size < 3: allRunsHaveXBeyond1 = False continue posLap1 = np.searchsorted(xd, 1.0) posLap2 = np.searchsorted(xd, 2.0) if posLap1 < xd.size: ymin = np.minimum(ymin, yd[posLap1]) ymax = np.maximum(ymax, yd[posLap1:].max()) if posLap2 < xd.size: ymin2 = np.minimum(ymin2, yd[posLap2]) xmax = np.maximum(xmax, xd.max()) if xd.max() <= 1: allRunsHaveXBeyond1 = False if allRunsHaveXBeyond1 and xmax > 1.5: # If all relevant curves extend beyond x=1, only show that part xmin = 1.0 - 1e-5 else: xmin = 0 if allRunsHaveXBeyond1 and ymin2 < ymax: range1 = ymax - ymin range2 = ymax - ymin2 if 10 * range2 < range1: # Y values jump from lap1 to lap2 is enormous, # so let's just show y values from lap2 onward... ymin = ymin2 if (not np.allclose(ymax, ymin)) and allRunsHaveXBeyond1: pylab.ylim([ymin, ymax + 0.1 * (ymax - ymin)]) pylab.xlim([xmin, xmax + .05 * (xmax - xmin)]) if loc is not None and len(jpaths) > 1: pylab.legend(loc=loc, bbox_to_anchor=bbox_to_anchor) if tickfontsize is not None: pylab.tick_params(axis='both', which='major', labelsize=tickfontsize) if savefilename is not None: try: pylab.show(block=False) except TypeError: pass # when using IPython notebook pylab.savefig(savefilename, bbox_inches='tight', pad_inches=0) else: try: pylab.show(block=True) except TypeError: pass # when using IPython notebook