python-package/lets_plot/plot/scale_convenience.py (32 lines of code) (raw):

# # Copyright (c) 2019. JetBrains s.r.o. # Use of this source code is governed by the MIT license that can be found in the LICENSE file. # from .core import DummySpec from .scale_position import scale_x_continuous, scale_y_continuous, scale_x_discrete, scale_y_discrete # # Scale convenience functions to set the axis limits # __all__ = ['lims', 'xlim', 'ylim'] def lims(x, y): """ This is a shortcut for supplying the ``limits`` parameter to the x and y axes. Observations outside the range will be dropped. Parameters ---------- x : list of float Limits (2 elements) for the x axis. 1st element defines lower limit, 2nd element defines upper limit. None value in list means no bounds. y : list of float Limits (2 elements) for the y axis. 1st element defines lower limit, 2nd element defines upper limit. None value in list means no bounds. Returns ------- ``FeatureSpec`` Scale specification. Examples -------- .. jupyter-execute:: :linenos: :emphasize-lines: 9 import numpy as np from lets_plot import * LetsPlot.setup_html() n = 1000 np.random.seed(42) x = np.random.normal(size=n) y = np.random.normal(size=n) ggplot({'x': x, 'y': y}, aes('x', 'y')) + \\ geom_point() + lims([-2, 2], [-2, 2]) """ if x is None: x = [] if y is None: y = [] return xlim(*list(x)) + ylim(*list(y)) def xlim(*limits): """ This is a shortcut for supplying the ``limits`` parameter to the x axis. Observations outside the range will be dropped. Parameters ---------- limits Limits (2 parameters) for the x axis. 1st parameter defines lower limit, 2nd parameter defines upper limit. None value means no bounds. Returns ------- ``FeatureSpec`` Scale specification. Examples -------- .. jupyter-execute:: :linenos: :emphasize-lines: 9 import numpy as np from lets_plot import * LetsPlot.setup_html() n = 1000 np.random.seed(42) x = np.random.normal(size=n) y = np.random.normal(size=n) ggplot({'x': x, 'y': y}, aes('x', 'y')) + \\ geom_point() + xlim(-1, 1) """ return _limits("x", *limits) def ylim(*limits): """ This is a shortcut for supplying the ``limits`` parameter to the y axis. Observations outside the range will be dropped. Parameters ---------- limits Limits (2 parameters) for the y axis. 1st parameter defines lower limit, 2nd parameter defines upper limit. None value means no bounds. Returns ------- ``FeatureSpec`` Scale specification. Examples -------- .. jupyter-execute:: :linenos: :emphasize-lines: 9 import numpy as np from lets_plot import * LetsPlot.setup_html() n = 1000 np.random.seed(42) x = np.random.normal(size=n) y = np.random.normal(size=n) ggplot({'x': x, 'y': y}, aes('x', 'y')) + \\ geom_point() + ylim(-1, 1) """ return _limits("y", *limits) def _limits(aesthetic, *args): if len(args) == 0: return DummySpec() elif any(isinstance(v, (str, bytes)) for v in args): return _discrete_scale_limits(aesthetic=aesthetic, limits=list(args)) else: return _continuous_scale_limits(aesthetic=aesthetic, limits=list(args)) def _discrete_scale_limits(aesthetic, limits): if aesthetic == "x": return scale_x_discrete(limits=limits) elif aesthetic == "y": return scale_y_discrete(limits=limits) raise ValueError("Unexpected aesthetic value '{}'".format(aesthetic)) def _continuous_scale_limits(aesthetic, limits): if aesthetic == "x": return scale_x_continuous(limits=limits) elif aesthetic == "y": return scale_y_continuous(limits=limits) raise ValueError("Unexpected aesthetic value '{}'".format(aesthetic))