我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用matplotlib.pylab.xticks()。
def plot_entropy(): pylab.clf() pylab.figure(num=None, figsize=(5, 4)) title = "Entropy $H(X)$" pylab.title(title) pylab.xlabel("$P(X=$coin will show heads up$)$") pylab.ylabel("$H(X)$") pylab.xlim(xmin=0, xmax=1.1) x = np.arange(0.001, 1, 0.001) y = -x * np.log2(x) - (1 - x) * np.log2(1 - x) pylab.plot(x, y) # pylab.xticks([w*7*24 for w in [0,1,2,3,4]], ['week %i'%(w+1) for w in # [0,1,2,3,4]]) pylab.autoscale(tight=True) pylab.grid(True) filename = "entropy_demo.png" pylab.savefig(os.path.join(CHART_DIR, filename), bbox_inches="tight")
def plotBoundVsAlph(alphaVals=np.linspace(.001, 3, 1000), beta1=0.5): exactVals = cD_exact(alphaVals, beta1) boundVals = cD_bound(alphaVals, beta1) assert np.all(exactVals >= boundVals) pylab.plot(alphaVals, exactVals, 'k-', linewidth=LINEWIDTH) pylab.plot(alphaVals, boundVals, 'r--', linewidth=LINEWIDTH) pylab.xlabel("alpha", fontsize=FONTSIZE) pylab.ylabel(" ", fontsize=FONTSIZE) pylab.xlim([np.min(alphaVals) - 0.1, np.max(alphaVals) + 0.1]) pylab.ylim([np.min(exactVals) - 0.05, np.max(exactVals) + 0.05]) pylab.xticks(np.arange(np.max(alphaVals) + 1)) pylab.legend(['c_D exact', 'c_D surrogate'], fontsize=LEGENDSIZE, loc='lower right') pylab.tick_params(axis='both', which='major', labelsize=TICKSIZE)
def showExampleDocs(pylab=None, nrows=3, ncols=3): if pylab is None: from matplotlib import pylab Data = get_data(seed=0, nObsPerDoc=200) PRNG = np.random.RandomState(0) chosenDocs = PRNG.choice(Data.nDoc, nrows * ncols, replace=False) for ii, d in enumerate(chosenDocs): start = Data.doc_range[d] stop = Data.doc_range[d + 1] Xd = Data.X[start:stop] pylab.subplot(nrows, ncols, ii + 1) pylab.plot(Xd[:, 0], Xd[:, 1], 'k.') pylab.axis('image') pylab.xlim([-1.5, 1.5]) pylab.ylim([-1.5, 1.5]) pylab.xticks([]) pylab.yticks([]) pylab.tight_layout() # Set Toy Parameters ###########################################################
def nmf(fdoc, fvocab): T = 100 nmf = NMF(fdoc, fvocab) nmf.train(T) nmf.get_words() # print(mf.R) plt.figure() plt.plot(range(1,T+1),nmf.objective) plt.xticks(np.linspace(1,T,10)) plt.xlabel('Iterations') plt.ylabel('Objective') plt.title('Variation of objective with iterations') plt.savefig('hw5_2a.png') plt.show()
def plot1D_mat(a, b, M, title=''): """ Plot matrix M with the source and target 1D distribution Creates a subplot with the source distribution a on the left and target distribution b on the tot. The matrix M is shown in between. Parameters ---------- a : np.array, shape (na,) Source distribution b : np.array, shape (nb,) Target distribution M : np.array, shape (na,nb) Matrix to plot """ na, nb = M.shape gs = gridspec.GridSpec(3, 3) xa = np.arange(na) xb = np.arange(nb) ax1 = pl.subplot(gs[0, 1:]) pl.plot(xb, b, 'r', label='Target distribution') pl.yticks(()) pl.title(title) ax2 = pl.subplot(gs[1:, 0]) pl.plot(a, xa, 'b', label='Source distribution') pl.gca().invert_xaxis() pl.gca().invert_yaxis() pl.xticks(()) pl.subplot(gs[1:, 1:], sharex=ax1, sharey=ax2) pl.imshow(M, interpolation='nearest') pl.axis('off') pl.xlim((0, nb)) pl.tight_layout() pl.subplots_adjust(wspace=0., hspace=0.2)
def generate_box_plot(dataset, methods, position_rmses, orientation_rmses): num_methods = len(methods) x_ticks = np.linspace(0., 1., num_methods) width = 0.3 / num_methods spacing = 0.3 / num_methods fig, ax1 = plt.subplots() ax1.set_ylabel('RMSE position [m]', color='b') ax1.tick_params('y', colors='b') fig.suptitle( "Hand-Eye Calibration Method Error {}".format(dataset), fontsize='24') bp_position = ax1.boxplot(position_rmses, 0, '', positions=x_ticks - spacing, widths=width) plt.setp(bp_position['boxes'], color='blue', linewidth=line_width) plt.setp(bp_position['whiskers'], color='blue', linewidth=line_width) plt.setp(bp_position['fliers'], color='blue', marker='+', linewidth=line_width) plt.setp(bp_position['caps'], color='blue', linewidth=line_width) plt.setp(bp_position['medians'], color='blue', linewidth=line_width) ax2 = ax1.twinx() ax2.set_ylabel('RMSE Orientation [$^\circ$]', color='g') ax2.tick_params('y', colors='g') bp_orientation = ax2.boxplot( orientation_rmses, 0, '', positions=x_ticks + spacing, widths=width) plt.setp(bp_orientation['boxes'], color='green', linewidth=line_width) plt.setp(bp_orientation['whiskers'], color='green', linewidth=line_width) plt.setp(bp_orientation['fliers'], color='green', marker='+') plt.setp(bp_orientation['caps'], color='green', linewidth=line_width) plt.setp(bp_orientation['medians'], color='green', linewidth=line_width) plt.xticks(x_ticks, methods) plt.xlim(x_ticks[0] - 2.5 * spacing, x_ticks[-1] + 2.5 * spacing) plt.show()
def generate_time_plot(methods, datasets, runtimes_per_method, colors): num_methods = len(methods) num_datasets = len(datasets) x_ticks = np.linspace(0., 1., num_methods) width = 0.6 / num_methods / num_datasets spacing = 0.4 / num_methods / num_datasets fig, ax1 = plt.subplots() ax1.set_ylabel('Time [s]', color='b') ax1.tick_params('y', colors='b') ax1.set_yscale('log') fig.suptitle("Hand-Eye Calibration Method Timings", fontsize='24') handles = [] for i, dataset in enumerate(datasets): runtimes = [runtimes_per_method[dataset][method] for method in methods] bp = ax1.boxplot( runtimes, 0, '', positions=(x_ticks + (i - num_datasets / 2. + 0.5) * spacing * 2), widths=width) plt.setp(bp['boxes'], color=colors[i], linewidth=line_width) plt.setp(bp['whiskers'], color=colors[i], linewidth=line_width) plt.setp(bp['fliers'], color=colors[i], marker='+', linewidth=line_width) plt.setp(bp['medians'], color=colors[i], marker='+', linewidth=line_width) plt.setp(bp['caps'], color=colors[i], linewidth=line_width) handles.append(mpatches.Patch(color=colors[i], label=dataset)) plt.legend(handles=handles, loc=2) plt.xticks(x_ticks, methods) plt.xlim(x_ticks[0] - 2.5 * spacing * num_datasets, x_ticks[-1] + 2.5 * spacing * num_datasets) plt.show()
def plot_word_freq_dist(text): fd = text.vocab() samples = [item for item, _ in fd.most_common(50)] values = [fd[sample] for sample in samples] values = [sum(values[:i+1]) * 100.0/fd.N() for i in range(len(values))] pylab.title(text.name) pylab.xlabel("Samples") pylab.ylabel("Cumulative Percentage") pylab.plot(values) pylab.xticks(range(len(samples)), [str(s) for s in samples], rotation=90) pylab.show()
def malt_demo(nx=False): """ A demonstration of the result of reading a dependency version of the first sentence of the Penn Treebank. """ dg = DependencyGraph("""Pierre NNP 2 NMOD Vinken NNP 8 SUB , , 2 P 61 CD 5 NMOD years NNS 6 AMOD old JJ 2 NMOD , , 2 P will MD 0 ROOT join VB 8 VC the DT 11 NMOD board NN 9 OBJ as IN 9 VMOD a DT 15 NMOD nonexecutive JJ 15 NMOD director NN 12 PMOD Nov. NNP 9 VMOD 29 CD 16 NMOD . . 9 VMOD """) tree = dg.tree() tree.pprint() if nx: # currently doesn't work import networkx from matplotlib import pylab g = dg.nx_graph() g.info() pos = networkx.spring_layout(g, dim=1) networkx.draw_networkx_nodes(g, pos, node_size=50) # networkx.draw_networkx_edges(g, pos, edge_color='k', width=8) networkx.draw_networkx_labels(g, pos, dg.nx_labels) pylab.xticks([]) pylab.yticks([]) pylab.savefig('tree.png') pylab.show()
def _plot_correlation_func(x, y): r, p = pearsonr(x, y) title = "Cor($X_1$, $X_2$) = %.3f" % r pylab.scatter(x, y) pylab.title(title) pylab.xlabel("$X_1$") pylab.ylabel("$X_2$") f1 = scipy.poly1d(scipy.polyfit(x, y, 1)) pylab.plot(x, f1(x), "r--", linewidth=2) # pylab.xticks([w*7*24 for w in [0,1,2,3,4]], ['week %i'%(w+1) for w in # [0,1,2,3,4]])
def plot_representations(X, y, title): """Plot distributions and thier labels.""" x_min, x_max = np.min(X, 0), np.max(X, 0) X = (X - x_min) / (x_max - x_min) f = plt.figure(figsize=(15, 10.8), dpi=300) # ax = plt.subplot(111) for i in range(X.shape[0]): plt.text(X[i, 0], X[i, 1], str(y[i]), color=plt.cm.Set1(y[i] / 10.), fontdict={'weight': 'bold', 'size': 9}) # if hasattr(offsetbox, 'AnnotationBbox'): # # only print thumbnails with matplotlib > 1.0 # shown_images = np.array([[1., 1.]]) # just something big # for i in range(digits.data.shape[0]): # dist = np.sum((X[i] - shown_images) ** 2, 1) # if np.min(dist) < 4e-3: # # don't show points that are too close # continue # shown_images = np.r_[shown_images, [X[i]]] # imagebox = offsetbox.AnnotationBbox( # offsetbox.OffsetImage(digits.images[i], cmap=plt.cm.gray_r), # X[i]) # ax.add_artist(imagebox) plt.xticks([]), plt.yticks([]) if title is not None: plt.title(title) return f
def plotErrorVsAlph(alphaVals=np.linspace(.001, 3, 1000), beta1=0.5): exactVals = cD_exact(alphaVals, beta1) boundVals = cD_bound(alphaVals, beta1) assert np.all(exactVals >= boundVals) pylab.plot(alphaVals, exactVals - boundVals, '-', linewidth=LINEWIDTH, label='beta_1=%.2f' % (beta1)) pylab.xlim([np.min(alphaVals) - 0.1, np.max(alphaVals) + 0.1]) pylab.xticks(np.arange(np.max(alphaVals) + 1)) pylab.xlabel("alpha", fontsize=FONTSIZE) pylab.ylabel("error", fontsize=FONTSIZE) pylab.yticks(np.arange(0, 1.5, 0.5)) pylab.tick_params(axis='both', which='major', labelsize=TICKSIZE)
def makeFigure(hmmKappa=0): Data, trueResp = makeDataAndTrueResp() kemptyVals = np.asarray([0, 1, 2, 3.]) ELBOVals = np.zeros_like(kemptyVals, dtype=np.float) # Iterate over the number of empty states (0, 1, 2, ...) for ii, kempty in enumerate(kemptyVals): resp = makeNewRespWithEmptyStates(trueResp, kempty) ELBOVals[ii] = resp2ELBO_HDPHMM(Data, resp, hmmKappa=hmmKappa) # Make largest value the one with kempty=0, to make plot look good ELBOVals -= ELBOVals[0] # Plot the results from matplotlib import pylab figH = pylab.figure(figsize=(6, 4)) plotargs = dict(markersize=10, linewidth=3) pylab.plot(kemptyVals, ELBOVals, 'o--', label='HDP surrogate', color='b', markeredgecolor='b', **plotargs) pylab.xlabel('num. empty topics', fontsize=20) pylab.ylabel('change in ELBO', fontsize=20) B = 0.25 pylab.xlim([-B, kemptyVals[-1] + B]) pylab.xticks(kemptyVals) axH = pylab.gca() axH.tick_params(axis='both', which='major', labelsize=15) legH = pylab.legend(loc='upper left', prop={'size': 15}) figH.subplots_adjust(bottom=0.16, left=0.2) pylab.show(block=True)
def mchain(): T=10000 n_teams = 760 #create a class object: mc = markov_chain(n_teams, 'data/CFB2016_scores.csv', 'data/TeamNames.txt') mc.train(T) #plot diff variation: plt.figure() plt.plot(range(1,T+1),mc.diff) plt.xticks(np.linspace(1,T,9)) plt.xlabel('Iterations') plt.ylabel('1-norm between w_inf and w_t') plt.title('Variation of difference between w_inf and w_t with iterations') plt.savefig('hw5_1b.png') plt.show() #export results: mc.results.to_csv('hw5_1a.csv',index=False) ############################# #### PART B - NMF #############################
def line_plot(x,y1,y2,xticks,xlabel,ylabel,title,savfigname,leg=None): plt.figure() plt.plot(x,y1,'b') if y2 is not None: plt.plot(x,y2,'g') plt.legend(leg) plt.xticks(xticks) plt.xlabel(xlabel) plt.ylabel(ylabel) plt.title(title) plt.savefig(savfigname) plt.show()
def plot_posterior_linear(params_fname, fig_fname, control=False, M=20): # load dataset data = np.loadtxt('./sandbox/hh_data.txt') # use the voltage and potasisum current data = data / np.std(data, axis=0) y = data[:, :4] xc = data[:, [-1]] # init hypers Dlatent = 2 Dobs = y.shape[1] T = y.shape[0] if control: x_control = xc no_panes = 5 else: x_control = None no_panes = 4 model_aep = aep.SGPSSM_Linear(y, Dlatent, M, lik='Gaussian', prior_mean=0, prior_var=1000, x_control=x_control) model_aep.load_model(params_fname) my, vy, vyn = model_aep.get_posterior_y() vy_diag = np.diagonal(vy, axis1=1, axis2=2) vyn_diag = np.diagonal(vyn, axis1=1, axis2=2) cs = ['k', 'r', 'b', 'g'] labels = ['V', 'm', 'n', 'h'] plt.figure() t = np.arange(T) for i in range(4): yi = y[:, i] mi = my[:, i] vi = vy_diag[:, i] vin = vyn_diag[:, i] plt.subplot(no_panes, 1, i + 1) plt.fill_between(t, mi + 2 * np.sqrt(vi), mi - 2 * np.sqrt(vi), color=cs[i], alpha=0.4) plt.plot(t, mi, '-', color=cs[i]) plt.plot(t, yi, '--', color=cs[i]) plt.ylabel(labels[i]) plt.xticks([]) plt.yticks([]) if control: plt.subplot(no_panes, 1, no_panes) plt.plot(t, x_control, '-', color='m') plt.ylabel('I') plt.yticks([]) plt.xlabel('t') plt.savefig(fig_fname) if control: plot_model_with_control(model_aep, '', '_linear_with_control') else: plot_model_no_control(model_aep, '', '_linear_no_control')
def plot_posterior_gp(params_fname, fig_fname, control=False, M=20): # load dataset data = np.loadtxt('./sandbox/hh_data.txt') # use the voltage and potasisum current data = data / np.std(data, axis=0) y = data[:, :4] xc = data[:, [-1]] # init hypers Dlatent = 2 Dobs = y.shape[1] T = y.shape[0] if control: x_control = xc no_panes = 5 else: x_control = None no_panes = 4 model_aep = aep.SGPSSM_GP(y, Dlatent, M, lik='Gaussian', prior_mean=0, prior_var=1000, x_control=x_control) model_aep.load_model(params_fname) my, vy, vyn = model_aep.get_posterior_y() cs = ['k', 'r', 'b', 'g'] labels = ['V', 'm', 'n', 'h'] plt.figure() t = np.arange(T) for i in range(4): yi = y[:, i] mi = my[:, i] vi = vy[:, i] vin = vyn[:, i] plt.subplot(no_panes, 1, i + 1) plt.fill_between(t, mi + 2 * np.sqrt(vi), mi - 2 * np.sqrt(vi), color=cs[i], alpha=0.4) plt.plot(t, mi, '-', color=cs[i]) plt.plot(t, yi, '--', color=cs[i]) plt.ylabel(labels[i]) plt.xticks([]) plt.yticks([]) if control: plt.subplot(no_panes, 1, no_panes) plt.plot(t, x_control, '-', color='m') plt.ylabel('I') plt.yticks([]) plt.xlabel('t') plt.savefig(fig_fname) # if control: # plot_model_with_control(model_aep, '', '_gp_with_control') # else: # plot_model_no_control(model_aep, '', '_gp_no_control')
def plot_prediction_gp(params_fname, fig_fname, M=20): # load dataset data = np.loadtxt('./sandbox/hh_data.txt') # use the voltage and potasisum current data = data / np.std(data, axis=0) y = data[:, :4] xc = data[:, [-1]] # init hypers Dlatent = 2 Dobs = y.shape[1] T = y.shape[0] x_control = xc # x_control_test = np.flipud(x_control) x_control_test = x_control * 1.5 no_panes = 5 model_aep = aep.SGPSSM_GP(y, Dlatent, M, lik='Gaussian', prior_mean=0, prior_var=1000, x_control=x_control) model_aep.load_model(params_fname) print 'ls ', np.exp(model_aep.dyn_layer.ls) my, vy, vyn = model_aep.get_posterior_y() mxp, vxp, myp, vyp, vynp = model_aep.predict_forward(T, x_control_test) cs = ['k', 'r', 'b', 'g'] labels = ['V', 'm', 'n', 'h'] plt.figure() t = np.arange(T) for i in range(4): yi = y[:, i] mi = my[:, i] vi = vy[:, i] vin = vyn[:, i] mip = myp[:, i] vip = vyp[:, i] vinp = vynp[:, i] plt.subplot(5, 1, i + 1) plt.fill_between(t, mi + 2 * np.sqrt(vi), mi - 2 * np.sqrt(vi), color=cs[i], alpha=0.4) plt.plot(t, mi, '-', color=cs[i]) plt.fill_between(np.arange(T, 2 * T), mip + 2 * np.sqrt(vip), mip - 2 * np.sqrt(vip), color=cs[i], alpha=0.4) plt.plot(np.arange(T, 2 * T), mip, '-', color=cs[i]) plt.plot(t, yi, '--', color=cs[i]) plt.axvline(x=T, color='k', linewidth=2) plt.ylabel(labels[i]) plt.xticks([]) plt.yticks([]) plt.subplot(no_panes, 1, no_panes) plt.plot(t, x_control, '-', color='m') plt.plot(np.arange(T, 2 * T), x_control_test, '-', color='m') plt.axvline(x=T, color='k', linewidth=2) plt.ylabel('I') plt.yticks([]) plt.xlabel('t') plt.savefig(fig_fname)
def Main(self): """ Main demo for the Hodgkin Huxley neuron model """ X = odeint(self.dALLdt, [-65, 0.05, 0.6, 0.32], self.t, args=(self,)) V = X[:,0] m = X[:,1] h = X[:,2] n = X[:,3] ina = self.I_Na(V, m, h) ik = self.I_K(V, n) il = self.I_L(V) plt.figure() plt.subplot(3,1,1) plt.title('Hodgkin-Huxley Neuron') plt.plot(self.t, V, 'k') plt.ylabel('V (mV)') plt.xticks([]) # plt.subplot(4,1,2) # plt.plot(self.t, ina, 'c', label='$I_{Na}$') # plt.plot(self.t, ik, 'y', label='$I_{K}$') # plt.plot(self.t, il, 'm', label='$I_{L}$') # plt.ylabel('Current') # plt.xticks([]) # plt.legend(loc='upper center', ncol=3, prop=fontP) plt.subplot(3,1,2) plt.plot(self.t, m, 'r', label='m') plt.plot(self.t, h, 'g', label='h') plt.plot(self.t, n, 'b', label='n') plt.ylabel('Gating Value') plt.xticks([]) plt.legend(loc='upper center', ncol=3, prop=fontP) plt.subplot(3,1,3) i_inj_values = [self.I_inj(t) for t in self.t] plt.plot(self.t, i_inj_values, 'k') plt.xlabel('t (ms)') plt.ylabel('$I_{inj}$ ($\\mu{A}/cm^2$)') plt.ylim(-2, 42) plt.savefig('/tmp/hh_data_all.pdf') plt.figure() plt.plot(V, n, 'ok', alpha=0.2) plt.xlabel('V') plt.ylabel('n') np.savetxt('hh_data.txt', np.vstack((V, m, n, h, np.array(i_inj_values))).T, fmt='%.5f') plt.show() plt.savefig('/tmp/hh_data_V_n.pdf')
def plot(self, *args, **kwargs): """ Plot samples from the frequency distribution displaying the most frequent sample first. If an integer parameter is supplied, stop after this many samples have been plotted. For a cumulative plot, specify cumulative=True. (Requires Matplotlib to be installed.) :param title: The title for the graph :type title: str :param cumulative: A flag to specify whether the plot is cumulative (default = False) :type title: bool """ try: from matplotlib import pylab except ImportError: raise ValueError('The plot function requires matplotlib to be installed.' 'See http://matplotlib.org/') if len(args) == 0: args = [len(self)] samples = [item for item, _ in self.most_common(*args)] cumulative = _get_kwarg(kwargs, 'cumulative', False) if cumulative: freqs = list(self._cumulative_frequencies(samples)) ylabel = "Cumulative Counts" else: freqs = [self[sample] for sample in samples] ylabel = "Counts" # percents = [f * 100 for f in freqs] only in ProbDist? pylab.grid(True, color="silver") if not "linewidth" in kwargs: kwargs["linewidth"] = 2 if "title" in kwargs: pylab.title(kwargs["title"]) del kwargs["title"] pylab.plot(freqs, **kwargs) pylab.xticks(range(len(samples)), [compat.text_type(s) for s in samples], rotation=90) pylab.xlabel("Samples") pylab.ylabel(ylabel) pylab.show()
def plot(self, *args, **kwargs): """ Plot the given samples from the conditional frequency distribution. For a cumulative plot, specify cumulative=True. (Requires Matplotlib to be installed.) :param samples: The samples to plot :type samples: list :param title: The title for the graph :type title: str :param conditions: The conditions to plot (default is all) :type conditions: list """ try: from matplotlib import pylab except ImportError: raise ValueError('The plot function requires matplotlib to be installed.' 'See http://matplotlib.org/') cumulative = _get_kwarg(kwargs, 'cumulative', False) conditions = _get_kwarg(kwargs, 'conditions', sorted(self.conditions())) title = _get_kwarg(kwargs, 'title', '') samples = _get_kwarg(kwargs, 'samples', sorted(set(v for c in conditions for v in self[c]))) # this computation could be wasted if not "linewidth" in kwargs: kwargs["linewidth"] = 2 for condition in conditions: if cumulative: freqs = list(self[condition]._cumulative_frequencies(samples)) ylabel = "Cumulative Counts" legend_loc = 'lower right' else: freqs = [self[condition][sample] for sample in samples] ylabel = "Counts" legend_loc = 'upper right' # percents = [f * 100 for f in freqs] only in ConditionalProbDist? kwargs['label'] = "%s" % condition pylab.plot(freqs, *args, **kwargs) pylab.legend(loc=legend_loc) pylab.grid(True, color="silver") pylab.xticks(range(len(samples)), [compat.text_type(s) for s in samples], rotation=90) if title: pylab.title(title) pylab.xlabel("Samples") pylab.ylabel(ylabel) pylab.show()
def makeFigure(**kwargs): Data, trueResp = makeDataAndTrueResp(**kwargs) kemptyVals = np.asarray([0, 1, 2, 3.]) ELBOVals = np.zeros_like(kemptyVals, dtype=np.float) PointEstELBOVals = np.zeros_like(kemptyVals, dtype=np.float) # Iterate over the number of empty states (0, 1, 2, ...) for ii, kempty in enumerate(kemptyVals): resp = makeNewRespWithEmptyStates(trueResp, kempty) PointEstELBOVals[ii] = resp2ELBO_HDPTopicModel( Data, resp, doPointEstimate=1, **kwargs) ELBOVals[ii] = resp2ELBO_HDPTopicModel(Data, resp, **kwargs) # Make largest value the one with kempty=0, to make plot look good PointEstELBOVals -= PointEstELBOVals[0] ELBOVals -= ELBOVals[0] # Rescale so that yaxis has units on order of 1, not 0.001 scale = np.max(np.abs(ELBOVals)) ELBOVals /= scale PointEstELBOVals /= scale # Set buffer-space for defining plotable area xB = 0.25 B = 0.19 # big buffer for sides where we will put text labels b = 0.01 # small buffer for other sides TICKSIZE = 30 FONTSIZE = 40 LEGENDSIZE = 30 LINEWIDTH = 4 # Plot the results figH = pylab.figure(figsize=(9.1, 6)) axH = pylab.subplot(111) axH.set_position([xB, B, (1 - xB - b), (1 - B - b)]) plotargs = dict(markersize=20, linewidth=LINEWIDTH) pylab.plot(kemptyVals, PointEstELBOVals, 'v-', label='HDP point est', color='b', markeredgecolor='b', **plotargs) pylab.plot(kemptyVals, np.zeros_like(kemptyVals), 's:', label='HDP exact', color='g', markeredgecolor='g', **plotargs) pylab.plot(kemptyVals, ELBOVals, 'o--', label='HDP surrogate', color='r', markeredgecolor='r', **plotargs) pylab.xlabel('num. empty topics', fontsize=FONTSIZE) pylab.ylabel('change in ELBO', fontsize=FONTSIZE) xB = 0.25 pylab.xlim([-xB, kemptyVals[-1] + xB]) pylab.xticks(kemptyVals) pylab.yticks([-1, 0, 1]) axH = pylab.gca() axH.tick_params(axis='both', which='major', labelsize=TICKSIZE) legH = pylab.legend(loc='upper left', prop={'size': LEGENDSIZE})