def plot_latent(self, labels=None, which_indices=None,<EOL>resolution=<NUM_LIT>, legend=True,<EOL>plot_limits=None,<EOL>updates=False,<EOL>kern=None, marker='<STR_LIT>',<EOL>num_samples=<NUM_LIT:1000>, projection='<STR_LIT>',<EOL>scatter_kwargs=None, **imshow_kwargs):
if projection != '<STR_LIT>':<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>input_1, input_2 = which_indices = self.get_most_significant_input_dimensions(which_indices)[:<NUM_LIT:2>]<EOL>X = get_x_y_var(self)[<NUM_LIT:0>]<EOL>_, _, Xgrid, _, _, xmin, xmax, resolution = helper_for_plot_data(self, X, plot_limits, which_indices, None, resolution)<EOL>canvas, imshow_kwargs = pl().new_canvas(xlim=(xmin[<NUM_LIT:0>], xmax[<NUM_LIT:0>]), ylim=(xmin[<NUM_LIT:1>], xmax[<NUM_LIT:1>]),<EOL>xlabel='<STR_LIT>' % input_1, ylabel='<STR_LIT>' % input_2, **imshow_kwargs)<EOL>if legend:<EOL><INDENT>if (labels is not None):<EOL><INDENT>legend = find_best_layout_for_subplots(len(np.unique(labels)))[<NUM_LIT:1>]<EOL><DEDENT>else:<EOL><INDENT>labels = np.ones(self.num_data)<EOL>legend = False<EOL><DEDENT><DEDENT>scatters = _plot_latent_scatter(canvas, X, which_indices, labels, marker, num_samples, projection='<STR_LIT>', **scatter_kwargs or {})<EOL>view = _plot_latent(self, canvas, which_indices, Xgrid, xmin, xmax, resolution, updates, kern, **imshow_kwargs)<EOL>retval = pl().add_to_canvas(canvas, dict(scatter=scatters, imshow=view), legend=legend)<EOL>_wait_for_updates(view, updates)<EOL>return retval<EOL>
Plot the latent space of the GP on the inputs. This is the
density of the GP posterior as a grey scale and the
scatter plot of the input dimemsions selected by which_indices.

:param array-like labels: a label for each data point (row) of the inputs
:param (int, int) which_indices: which input dimensions to plot against each other
:param int resolution: the resolution at which we predict the magnification factor
:param bool legend: whether to plot the legend on the figure
:param plot_limits: the plot limits for the plot
:type plot_limits: (xmin, xmax, ymin, ymax) or ((xmin, xmax), (ymin, ymax))
:param bool updates: if possible, make interactive updates using the specific library you are using
:param :py:class:`~GPy.kern.Kern` kern: the kernel to use for prediction
:param str marker: markers to use - cycle if more labels then markers are given
:param int num_samples: the number of samples to plot maximally. We do a stratified subsample from the labels, if the number of samples (in X) is higher then num_samples.
:param imshow_kwargs: the kwargs for the imshow (magnification factor)
:param scatter_kwargs: the kwargs for the scatter plots