python-package/lets_plot/mapping.py (16 lines of code) (raw):

# Copyright (c) 2020. JetBrains s.r.o. # Use of this source code is governed by the MIT license that can be found in the LICENSE file. __all__ = ['as_discrete'] class MappingMeta: def __init__(self, variable, annotation, levels, **parameters): if variable is None: raise ValueError("variable can't be none") if annotation is None: raise ValueError("annotation can't be none") self.variable = variable self.annotation = annotation self.levels = levels self.parameters = parameters def as_discrete(variable, label=None, order_by=None, order=None, levels=None): """ The function converts a column to a discrete scale and allows you to specify the order of its values. Parameters ---------- variable : str The name of the variable. label : str The name of the scale - used as the axis label or the legend title. order_by : str The variable name to order by. order : int The ordering direction. 1 for ascending, -1 for descending. levels : list The list of values that defines a specific order of categories. Returns ------- ``MappingMeta`` or list Variable meta information. Notes ----- The plot will use a discrete scale for the aesthetic mapping. It is similar to the ``factor()`` function from R but works differently - there is no data transformation. To enable ordering mode, at least one ordering parameter (``order_by`` or ``order``) should be specified. By the default, it will use descending direction and ordering by eigenvalues. You cannot specify different order settings for the same variable. But if these settings don't contradict each other, they will be combined. Examples -------- .. jupyter-execute:: :linenos: :emphasize-lines: 12 import numpy as np from lets_plot import * LetsPlot.setup_html() n = 100 np.random.seed(42) data = { 'x': np.random.normal(size=n), 'y': np.random.normal(size=n), 'c': np.random.randint(5, size=n), } ggplot(data, aes('x', 'y')) + \\ geom_point(aes(color=as_discrete('c'))) | .. jupyter-execute:: :linenos: :emphasize-lines: 11 import numpy as np from lets_plot import * LetsPlot.setup_html() n = 100 np.random.seed(42) data = { 'x': np.random.uniform(size=100), 'c': np.random.choice(list('abcde'), size=100), } ggplot(data) + \\ geom_boxplot(aes(as_discrete('c', label='class', order=1), 'x')) | .. jupyter-execute:: :linenos: :emphasize-lines: 12-13 import numpy as np from lets_plot import * LetsPlot.setup_html() n = 100 np.random.seed(42) data = { 'x': np.random.normal(size=n), 'c': np.random.choice(list('abcde'), size=n), 'i': np.random.randint(3, size=n), } ggplot(data) + \\ geom_bar(aes(as_discrete('c', order=1, order_by='..count..'), 'x', \\ fill=as_discrete('i', order=1, order_by='..count..'))) """ if isinstance(variable, str): label = variable if label is None else label return MappingMeta(variable, 'as_discrete', levels=levels, label=label, order_by=order_by, order=order) # aes(x=as_discrete([1, 2, 3])) - pass as is return variable