diff --git a/GPy/plotting/__init__.py b/GPy/plotting/__init__.py index b898f9b0..d8de7b03 100644 --- a/GPy/plotting/__init__.py +++ b/GPy/plotting/__init__.py @@ -43,20 +43,20 @@ if config.get('plotting', 'library') is not 'none': from ..models import GPLVM, BayesianGPLVM, bayesian_gplvm_minibatch, SSGPLVM, SSMRD GPLVM.plot_latent = gpy_plot.latent_plots.plot_latent - GPLVM.plot_latent_scatter = gpy_plot.latent_plots.plot_latent_scatter - GPLVM.plot_latent_inducing = gpy_plot.latent_plots.plot_latent_inducing + GPLVM.plot_scatter = gpy_plot.latent_plots.plot_latent_scatter + GPLVM.plot_inducing = gpy_plot.latent_plots.plot_latent_inducing GPLVM.plot_steepest_gradient_map = gpy_plot.latent_plots.plot_steepest_gradient_map BayesianGPLVM.plot_latent = gpy_plot.latent_plots.plot_latent - BayesianGPLVM.plot_latent_scatter = gpy_plot.latent_plots.plot_latent_scatter - BayesianGPLVM.plot_latent_inducing = gpy_plot.latent_plots.plot_latent_inducing + BayesianGPLVM.plot_scatter = gpy_plot.latent_plots.plot_latent_scatter + BayesianGPLVM.plot_inducing = gpy_plot.latent_plots.plot_latent_inducing BayesianGPLVM.plot_steepest_gradient_map = gpy_plot.latent_plots.plot_steepest_gradient_map bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch.plot_latent = gpy_plot.latent_plots.plot_latent - bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch.plot_latent_scatter = gpy_plot.latent_plots.plot_latent_scatter - bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch.plot_latent_inducing = gpy_plot.latent_plots.plot_latent_inducing + bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch.plot_scatter = gpy_plot.latent_plots.plot_latent_scatter + bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch.plot_inducing = gpy_plot.latent_plots.plot_latent_inducing bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch.plot_steepest_gradient_map = gpy_plot.latent_plots.plot_steepest_gradient_map SSGPLVM.plot_latent = gpy_plot.latent_plots.plot_latent - SSGPLVM.plot_latent_scatter = gpy_plot.latent_plots.plot_latent_scatter - SSGPLVM.plot_latent_inducing = gpy_plot.latent_plots.plot_latent_inducing + SSGPLVM.plot_scatter = gpy_plot.latent_plots.plot_latent_scatter + SSGPLVM.plot_inducing = gpy_plot.latent_plots.plot_latent_inducing SSGPLVM.plot_steepest_gradient_map = gpy_plot.latent_plots.plot_steepest_gradient_map from ..kern import Kern diff --git a/GPy/plotting/gpy_plot/latent_plots.py b/GPy/plotting/gpy_plot/latent_plots.py index 88aeda9a..576e747c 100644 --- a/GPy/plotting/gpy_plot/latent_plots.py +++ b/GPy/plotting/gpy_plot/latent_plots.py @@ -52,7 +52,7 @@ def _plot_latent_scatter(canvas, X, visible_dims, labels, marker, num_samples, p Tango.reset() X, labels = subsample_X(X, labels, num_samples) scatters = [] - generate_colors = 'color' not in kwargs + generate_colors = 'color' not in kwargs for x, y, z, this_label, _, m in scatter_label_generator(labels, X, visible_dims, marker): update_not_existing_kwargs(kwargs, pl.defaults.latent_scatter) if generate_colors: @@ -89,7 +89,7 @@ def plot_latent_scatter(self, labels=None, labels = np.ones(self.num_data) legend = False else: - legend = find_best_layout_for_subplots(len(np.unique(labels))) + legend = find_best_layout_for_subplots(len(np.unique(labels)))[1] scatters = _plot_latent_scatter(canvas, X, sig_dims, labels, marker, num_samples, projection=projection, **kwargs) if projection == '3d': return pl.show_canvas(canvas, dict(scatter=scatters), legend=legend, @@ -126,9 +126,9 @@ def plot_latent_inducing(self, if 'color' not in kwargs: kwargs['color'] = 'white' canvas, kwargs = pl.get_new_canvas(projection=projection, **kwargs) - X, _, _ = get_x_y_var(self) - labels = np.ones(self.num_data) - scatters = _plot_latent_scatter(canvas, X, sig_dims, labels, marker, num_samples, projection=projection, **kwargs) + Z = self.Z.values + labels = np.array(['inducing'] * Z.shape[0]) + scatters = _plot_latent_scatter(canvas, Z, sig_dims, labels, marker, num_samples, projection=projection, **kwargs) if projection == '3d': return pl.show_canvas(canvas, dict(scatter=scatters), legend=legend, xlabel='latent dimension %i' % input_1, diff --git a/GPy/plotting/gpy_plot/plot_util.py b/GPy/plotting/gpy_plot/plot_util.py index 031d5266..954593d6 100644 --- a/GPy/plotting/gpy_plot/plot_util.py +++ b/GPy/plotting/gpy_plot/plot_util.py @@ -138,7 +138,6 @@ def scatter_label_generator(labels, X, visible_dims, marker=None): for lab in labels: if not lab in ulabels: ulabels.append(lab) - if marker is not None: marker = itertools.cycle(list(marker)) else: @@ -154,19 +153,20 @@ def scatter_label_generator(labels, X, visible_dims, marker=None): except: input_1 = visible_dims input_2 = input_3 = None - + for ul in ulabels: - if type(ul) is np.string_: - this_label = ul - elif type(ul) is np.int64: - this_label = 'class %i' % ul - else: + from numbers import Number + if isinstance(ul, str): try: this_label = unicode(ul) except NameError: #python3 this_label = ul - + elif isinstance(ul, Number): + this_label = 'class {!s}'.format(ul) + else: + this_label = ul + if marker is not None: m = next(marker) diff --git a/GPy/plotting/matplot_dep/plot_definitions.py b/GPy/plotting/matplot_dep/plot_definitions.py index 3744d86b..b9d726c2 100644 --- a/GPy/plotting/matplot_dep/plot_definitions.py +++ b/GPy/plotting/matplot_dep/plot_definitions.py @@ -76,7 +76,13 @@ class MatplotlibPlots(AbstractPlottingLibrary): legend_ontop(ax, ncol=legend, fontdict=fontdict) if zlim is not None: ax.set_zlim(zlim) - #ax.figure.show() + ax.figure.canvas.draw() + ax.figure.show() + #try: + # ax.figure.tight_layout() + #except: + # # couldnt do tight layout, python 2.7 on MacOSX + # pass ax.figure.canvas.draw() return plots diff --git a/GPy/plotting/matplot_dep/util.py b/GPy/plotting/matplot_dep/util.py index 562c7a71..2dd6af85 100644 --- a/GPy/plotting/matplot_dep/util.py +++ b/GPy/plotting/matplot_dep/util.py @@ -35,7 +35,7 @@ def legend_ontop(ax, mode='expand', ncol=3, fontdict=None): from mpl_toolkits.axes_grid1 import make_axes_locatable handles, labels = ax.get_legend_handles_labels() divider = make_axes_locatable(ax) - cax = divider.append_axes("top", "5%", pad="1%") + cax = divider.append_axes("top", "5%", pad=0) lgd = cax.legend(handles, labels, bbox_to_anchor=(0., 0., 1., 1.), loc=3, ncol=ncol, mode=mode, borderaxespad=0., prop=fontdict or {}) cax.set_axis_off() diff --git a/GPy/testing/plotting_tests.py b/GPy/testing/plotting_tests.py index 3723c1ac..1b068899 100644 --- a/GPy/testing/plotting_tests.py +++ b/GPy/testing/plotting_tests.py @@ -74,7 +74,7 @@ def _image_comparison(baseline_images, extensions=['pdf','svg','ong'], tol=10): fig.axes[0].set_axis_off() fig.set_frameon(False) fig.canvas.draw() - fig.savefig(os.path.join(result_dir, "{}.{}".format(base, ext))) + fig.savefig(os.path.join(result_dir, "{}.{}".format(base, ext)), transparent=True, edgecolor='none', facecolor='none') for num, base in zip(plt.get_fignums(), baseline_images): for ext in extensions: #plt.close(num) @@ -145,9 +145,9 @@ def test_classification(): Y = f+np.random.normal(0, .1, f.shape) m = GPy.models.GPClassification(X, Y>Y.mean()) m.optimize() - fig, ax = plt.subplots() + _, ax = plt.subplots() m.plot(plot_raw=False, apply_link=False, ax=ax) - fig, ax = plt.subplots() + _, ax = plt.subplots() m.plot(plot_raw=True, apply_link=False, ax=ax) m.plot(plot_raw=True, apply_link=True) for do_test in _image_comparison(baseline_images=['gp_class_{}'.format(sub) for sub in ["likelihood", "raw", 'raw_link']], extensions=extensions): @@ -182,7 +182,7 @@ def test_gplvm(): #m.optimize(messages=0) labels = np.random.multinomial(1, np.random.dirichlet([.3333333, .3333333, .3333333]), size=(m.Y.shape[0])).nonzero()[1] m.plot_latent() - m.plot_latent_scatter(projection='3d', labels=labels) + m.plot_scatter(projection='3d', labels=labels) m.plot_magnification(labels=labels) m.plot_steepest_gradient_map(resolution=7) for do_test in _image_comparison(baseline_images=['gplvm_{}'.format(sub) for sub in ["latent", "latent_3d", "magnification", 'gradient']], extensions=extensions): @@ -202,9 +202,9 @@ def test_bayesian_gplvm(): m.likelihood.variance = .1 #m.optimize(messages=0) labels = np.random.multinomial(1, np.random.dirichlet([.3333333, .3333333, .3333333]), size=(m.Y.shape[0])).nonzero()[1] - m.plot_latent_inducing(projection='2d') - m.plot_latent_inducing(projection='3d') - m.plot_latent_scatter(projection='3d') + m.plot_inducing(projection='2d') + m.plot_inducing(projection='3d') + m.plot_scatter(projection='3d') m.plot_magnification(labels=labels) m.plot_steepest_gradient_map(resolution=7) for do_test in _image_comparison(baseline_images=['bayesian_gplvm_{}'.format(sub) for sub in ["inducing", "inducing_3d", "latent_3d", "magnification", 'gradient']], extensions=extensions): diff --git a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_gradient.png b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_gradient.png index cf4eca4b..697862ad 100644 Binary files a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_gradient.png and b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_gradient.png differ diff --git a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing.png b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing.png index 780415c9..9ef57a9a 100644 Binary files a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing.png and b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing.png differ diff --git a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing_3d.png b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing_3d.png index df2f5cd6..1177a685 100644 Binary files a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing_3d.png and b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_inducing_3d.png differ diff --git a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_latent_3d.png b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_latent_3d.png index 235cf121..db81f483 100644 Binary files a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_latent_3d.png and b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_latent_3d.png differ diff --git a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_magnification.png b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_magnification.png index 58d4a72d..f20865ab 100644 Binary files a/GPy/testing/plotting_tests/baseline/bayesian_gplvm_magnification.png and b/GPy/testing/plotting_tests/baseline/bayesian_gplvm_magnification.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_2d_data.png b/GPy/testing/plotting_tests/baseline/gp_2d_data.png index 64414880..e16283d4 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_2d_data.png and b/GPy/testing/plotting_tests/baseline/gp_2d_data.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_2d_mean.png b/GPy/testing/plotting_tests/baseline/gp_2d_mean.png index d668ebc3..2b9161be 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_2d_mean.png and b/GPy/testing/plotting_tests/baseline/gp_2d_mean.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_3d_data.png b/GPy/testing/plotting_tests/baseline/gp_3d_data.png index a7fa15b3..1fa42efb 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_3d_data.png and b/GPy/testing/plotting_tests/baseline/gp_3d_data.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_3d_mean.png b/GPy/testing/plotting_tests/baseline/gp_3d_mean.png index 4fa611a1..ba0198e4 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_3d_mean.png and b/GPy/testing/plotting_tests/baseline/gp_3d_mean.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_class_likelihood.png b/GPy/testing/plotting_tests/baseline/gp_class_likelihood.png index 7569660f..a41d3c01 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_class_likelihood.png and b/GPy/testing/plotting_tests/baseline/gp_class_likelihood.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_class_raw.png b/GPy/testing/plotting_tests/baseline/gp_class_raw.png index af1242a9..5a3fe51a 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_class_raw.png and b/GPy/testing/plotting_tests/baseline/gp_class_raw.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_class_raw_link.png b/GPy/testing/plotting_tests/baseline/gp_class_raw_link.png index a81f23c3..692d8292 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_class_raw_link.png and b/GPy/testing/plotting_tests/baseline/gp_class_raw_link.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_conf.png b/GPy/testing/plotting_tests/baseline/gp_conf.png index 4a5716c2..20ade891 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_conf.png and b/GPy/testing/plotting_tests/baseline/gp_conf.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_data.png b/GPy/testing/plotting_tests/baseline/gp_data.png index 1f143b05..c78a8df1 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_data.png and b/GPy/testing/plotting_tests/baseline/gp_data.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_density.png b/GPy/testing/plotting_tests/baseline/gp_density.png index 8f46208e..67974360 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_density.png and b/GPy/testing/plotting_tests/baseline/gp_density.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_error.png b/GPy/testing/plotting_tests/baseline/gp_error.png index a334bfc2..38c65afc 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_error.png and b/GPy/testing/plotting_tests/baseline/gp_error.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_mean.png b/GPy/testing/plotting_tests/baseline/gp_mean.png index 7bee55da..9168abe8 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_mean.png and b/GPy/testing/plotting_tests/baseline/gp_mean.png differ diff --git a/GPy/testing/plotting_tests/baseline/gp_samples.png b/GPy/testing/plotting_tests/baseline/gp_samples.png index 10b3e589..5addd077 100644 Binary files a/GPy/testing/plotting_tests/baseline/gp_samples.png and b/GPy/testing/plotting_tests/baseline/gp_samples.png differ diff --git a/GPy/testing/plotting_tests/baseline/gplvm_gradient.png b/GPy/testing/plotting_tests/baseline/gplvm_gradient.png index 6c371126..9ac2cc3a 100644 Binary files a/GPy/testing/plotting_tests/baseline/gplvm_gradient.png and b/GPy/testing/plotting_tests/baseline/gplvm_gradient.png differ diff --git a/GPy/testing/plotting_tests/baseline/gplvm_latent.png b/GPy/testing/plotting_tests/baseline/gplvm_latent.png index 1c4d86e5..0d5d2704 100644 Binary files a/GPy/testing/plotting_tests/baseline/gplvm_latent.png and b/GPy/testing/plotting_tests/baseline/gplvm_latent.png differ diff --git a/GPy/testing/plotting_tests/baseline/gplvm_latent_3d.png b/GPy/testing/plotting_tests/baseline/gplvm_latent_3d.png index 502ec3c1..da040371 100644 Binary files a/GPy/testing/plotting_tests/baseline/gplvm_latent_3d.png and b/GPy/testing/plotting_tests/baseline/gplvm_latent_3d.png differ diff --git a/GPy/testing/plotting_tests/baseline/gplvm_magnification.png b/GPy/testing/plotting_tests/baseline/gplvm_magnification.png index 84fb1cb6..3962d9c0 100644 Binary files a/GPy/testing/plotting_tests/baseline/gplvm_magnification.png and b/GPy/testing/plotting_tests/baseline/gplvm_magnification.png differ diff --git a/GPy/testing/plotting_tests/baseline/sparse_gp_class_likelihood.png b/GPy/testing/plotting_tests/baseline/sparse_gp_class_likelihood.png index aaf92882..f39cd024 100644 Binary files a/GPy/testing/plotting_tests/baseline/sparse_gp_class_likelihood.png and b/GPy/testing/plotting_tests/baseline/sparse_gp_class_likelihood.png differ diff --git a/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw.png b/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw.png index 7327e67c..c188bb4e 100644 Binary files a/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw.png and b/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw.png differ diff --git a/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw_link.png b/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw_link.png index 93175e37..453941fc 100644 Binary files a/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw_link.png and b/GPy/testing/plotting_tests/baseline/sparse_gp_class_raw_link.png differ diff --git a/GPy/testing/plotting_tests/baseline/sparse_gp_inducing.png b/GPy/testing/plotting_tests/baseline/sparse_gp_inducing.png index 38517df2..02a20eb2 100644 Binary files a/GPy/testing/plotting_tests/baseline/sparse_gp_inducing.png and b/GPy/testing/plotting_tests/baseline/sparse_gp_inducing.png differ diff --git a/GPy/util/datasets.py b/GPy/util/datasets.py index f9173365..b722ba45 100644 --- a/GPy/util/datasets.py +++ b/GPy/util/datasets.py @@ -94,10 +94,13 @@ def prompt_user(prompt): def data_available(dataset_name=None): """Check if the data set is available on the local machine already.""" - from itertools import izip_longest + try: + from itertools import izip_longest + except ImportError: + from itertools import zip_longest as izip_longest dr = data_resources[dataset_name] zip_urls = (dr['files'], ) - if dr.has_key('save_names'): zip_urls += (dr['save_names'], ) + if 'save_names' in dr: zip_urls += (dr['save_names'], ) else: zip_urls += ([],) for file_list, save_list in izip_longest(*zip_urls, fillvalue=[]): diff --git a/travis_tests.py b/travis_tests.py index 06d54de6..2d71de97 100644 --- a/travis_tests.py +++ b/travis_tests.py @@ -38,5 +38,5 @@ matplotlib.rcParams[u'figure.figsize'] = (4,3) matplotlib.rcParams[u'text.usetex'] = False import nose -nose.main('GPy', defaultTest='GPy/testing') +nose.main('GPy', defaultTest='GPy/testing/plotting_tests.py')