python-package/lets_plot/plot/scale_position.py (345 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 .scale import _scale
from .util import as_boolean
#
# Position Scales
#
__all__ = ['scale_x_discrete', 'scale_y_discrete',
'scale_x_discrete_reversed', 'scale_y_discrete_reversed',
'scale_x_continuous', 'scale_y_continuous',
'scale_x_log10', 'scale_y_log10',
'scale_x_log2', 'scale_y_log2',
'scale_x_reverse', 'scale_y_reverse',
'scale_x_datetime', 'scale_y_datetime',
'scale_x_time', 'scale_y_time',
]
#
# Continuous Scales
#
def scale_x_continuous(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
trans=None,
format=None,
position=None
):
"""
Continuous position scale x.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
trans : {'identity', 'log10', 'log2', 'symlog', 'sqrt', 'reverse'}
Name of built-in transformation.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 7-8
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
x = np.random.randint(-10, 10, size=100)
ggplot({'x': x}, aes(x='x')) + geom_bar(stat='bin', bins=8) + \\
scale_x_continuous(name='observations', breaks=[-9, -3, 3, 9], \\
limits=[-8, 11], expand=[.2], format='.1f')
"""
return _scale('x',
name=name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=trans,
guide=None,
format=format,
position=position,
)
def scale_y_continuous(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
trans=None,
format=None,
position=None
):
"""
Continuous position scale y.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
trans : {'identity', 'log10', 'log2', 'symlog', 'sqrt', 'reverse'}
Name of built-in transformation.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 7-8
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
x = np.random.randint(-10, 10, size=1000)
ggplot({'x': x}, aes(x='x')) + geom_bar(stat='bin', bins=4) + \\
scale_y_continuous(name='hundreds', breaks=[100, 200, 300, 400], \\
labels=['one', 'two', 'three', 'four'])
"""
return _scale('y',
name=name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=trans,
guide=None,
format=format,
position=position,
)
def scale_x_log10(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Continuous position scale x where trans='log10'.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 6
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
x = np.power(10, np.random.randint(9, size=100))
ggplot({'x': x}, aes(x='x')) + geom_bar() + scale_x_log10()
"""
return scale_x_continuous(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans='log10',
format=format,
position=position,
)
def scale_y_log10(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Continuous position scales y where trans='log10'.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 6
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
x = np.random.poisson(size=100)
ggplot({'x': x}, aes(x='x')) + geom_histogram() + scale_y_log10()
"""
return scale_y_continuous(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans='log10',
format=format,
position=position,
)
def scale_x_log2(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Continuous position scale x where trans='log2'.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 6
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
x = np.power(2, np.random.randint(9, size=100))
ggplot({'x': x}, aes(x='x')) + geom_bar() + scale_x_log2()
"""
return scale_x_continuous(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans='log2',
format=format,
position=position,
)
def scale_y_log2(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Continuous position scales y where trans='log2'.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 6
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(42)
x = np.random.poisson(size=100)
ggplot({'x': x}, aes(x='x')) + geom_histogram() + scale_y_log2()
"""
return scale_y_continuous(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans='log2',
format=format,
position=position,
)
def scale_x_reverse(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Continuous position scale x where trans='reverse'.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 5
from lets_plot import *
LetsPlot.setup_html()
x = list(range(10))
ggplot({'x': x, 'y': x}, aes('x', 'y')) + \\
geom_point() + scale_x_reverse()
"""
return scale_x_continuous(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans='reverse',
format=format,
position=position,
)
def scale_y_reverse(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Continuous position scale y where trans='reverse'.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 5
from lets_plot import *
LetsPlot.setup_html()
x = list(range(10))
ggplot({'x': x, 'y': x}, aes('x', 'y')) + \\
geom_point() + scale_y_reverse(limits=[2, 6])
"""
return scale_y_continuous(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans='reverse',
format=format,
position=position,
)
#
# Discrete Scales
#
def scale_x_discrete(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
reverse=None,
format=None,
position=None
):
"""
Discrete position scale x.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A vector specifying the data range for the scale and the default order of their display in guides.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0, additive = 0.2.
na_value
Missing values will be replaced with this value.
reverse : bool
When True the scale is reversed.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 7
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
np.random.seed(43)
scores = {'rating': np.random.randint(3, 6, size=10)}
ggplot(scores, aes(x=as_discrete('rating'))) + geom_bar() + \\
scale_x_discrete(name='rating', format='.1f')
"""
reverse = as_boolean(reverse, default=False)
return _scale('x',
name=name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=None,
guide=None,
format=format,
position=position,
#
discrete=True,
reverse=reverse
)
def scale_x_discrete_reversed(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Reversed discrete position scale x.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A vector specifying the data range for the scale and the default order of their display in guides.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0, additive = 0.2.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 8
from lets_plot import *
LetsPlot.setup_html()
data = {
'time': ['Lunch', 'Dinner', 'Night'],
'bill': [15.5, 18.13, 30],
}
ggplot(data, aes('time', 'bill')) + geom_bar(stat='identity') + \\
scale_x_discrete_reversed()
"""
return scale_x_discrete(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
format=format,
position=position,
#
reverse=True,
)
def scale_y_discrete(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
reverse=None,
format=None,
position=None,
):
"""
Discrete position scale y.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A vector specifying the data range for the scale and the default order of their display in guides.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0, additive = 0.2.
na_value
Missing values will be replaced with this value.
reverse : bool
When True the scale is reversed.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 8
from lets_plot import *
LetsPlot.setup_html()
data = {
'time': ['Breakfast', 'Lunch', 'Dinner', 'Night'],
'bill': [3.25, 15.5, 18.3, 30],
}
ggplot(data, aes('bill', 'time')) + geom_point(size=5) + \\
scale_y_discrete(limits=['Lunch', 'Dinner', 'Night'])
"""
reverse = as_boolean(reverse, default=False)
return _scale('y',
name=name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=None,
guide=None,
format=format,
position=position,
#
discrete=True,
reverse=reverse
)
def scale_y_discrete_reversed(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Reversed discrete position scale y.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A vector specifying the data range for the scale and the default order of their display in guides.
expand : list of two numbers
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0, additive = 0.2.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '.2f' -> '12.45'
- 'Num {}' -> 'Num 12.456789'
- 'TTL: {.2f}$' -> 'TTL: 12.45$'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 8
from lets_plot import *
LetsPlot.setup_html()
data = {
'time': ['Breakfast', 'Lunch', 'Dinner', 'Night'],
'bill': [3.25, 15.5, 18.3, 30],
}
ggplot(data, aes('bill', 'time')) + geom_line() + \\
scale_y_discrete_reversed()
"""
return scale_y_discrete(name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
format=format,
position=position,
#
reverse=True,
)
#
# Date-time
#
def scale_x_datetime(name=None, *,
breaks=None,
break_width=None,
labels=None,
lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Position scale for the x-axis with date/time data.
The input is expected to be either a series of integers representing milliseconds since the Unix epoch, or Python datetime objects.
Assumes UTC timezone if no timezone information is present in the data (naive datetime).
For timezone-aware datetime objects, the timezone information from the data is preserved.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
break_width : str
A string giving the distance between breaks, e.g., "2 weeks", "3 months", "12 hours".
Supported units: ms/millisecond(s), sec/second(s), min/minute(s),
hour(s), day(s), week(s), month(s), year(s).
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '%d.%m.%y' -> '06.08.19'
- '%B %Y' -> 'August 2019'
- '%a, %e %b %Y %H:%M:%S' -> 'Tue, 6 Aug 2019 04:46:35'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 12
import datetime as dt
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
n = 31
np.random.seed(42)
d = [dt.datetime(2021, 1, 1) + dt.timedelta(days=d)
for d in range(n)]
t = np.random.normal(loc=-5, scale=6, size=n)
ggplot({'d': d, 't': t}, aes('d', 't')) + \\
geom_histogram(aes(fill='t'), stat='identity', color='black') + \\
scale_x_datetime() + \\
scale_fill_gradient2(low='#2c7bb6', high='#d7191c')
"""
return _scale('x',
name=name,
breaks=breaks,
break_width=break_width,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=None,
guide=None,
format=format,
position=position,
#
datetime=True)
def scale_y_datetime(name=None, *,
breaks=None,
break_width=None,
labels=None,
lablim=None,
limits=None,
expand=None,
na_value=None,
format=None,
position=None
):
"""
Position scale for the y-axis with date/time data.
The input is expected to be either a series of integers representing milliseconds since the Unix epoch, or Python datetime objects.
Assumes UTC timezone if no timezone information is present in the data (naive datetime).
For timezone-aware datetime objects, the timezone information from the data is preserved.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
break_width : str
A string giving the distance between breaks, e.g., "2 weeks", "3 months", "12 hours".
Supported units: ms/millisecond(s), sec/second(s), min/minute(s),
hour(s), day(s), week(s), month(s), year(s).
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A vector of length two providing limits of the scale.
expand : list of two numbers
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
format : str
Define the format for labels on the scale. The syntax resembles Python's:
- '%d.%m.%y' -> '06.08.19'
- '%B %Y' -> 'August 2019'
- '%a, %e %b %Y %H:%M:%S' -> 'Tue, 6 Aug 2019 04:46:35'
For more info see `Formatting <https://lets-plot.org/python/pages/formats.html>`__.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 13
import datetime as dt
from lets_plot import *
LetsPlot.setup_html()
n = 12
rcount = lambda m: 1 if m < 2 else rcount(m - 1) + rcount(m - 2)
data = {
'date': [dt.datetime(2020, m, 1) for m in range(1, n + 1)],
'rabbits count': [rcount(m) for m in range(1, n + 1)],
}
ggplot(data) + \\
geom_segment(aes(x=[0] * n, y='date', xend='rabbits count', yend='date'), size=3, \\
tooltips=layer_tooltips().line('@|@{rabbits count}')) + \\
scale_y_datetime(format='%b') + \\
xlab('rabbits count')
"""
return _scale('y',
name=name,
breaks=breaks,
break_width=break_width,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=None,
guide=None,
format=format,
position=position,
#
datetime=True)
def scale_x_time(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
# format=None,
position=None
):
"""
Position scale x for data representing "time delta" values expressed in milliseconds.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 13
import datetime as dt
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
n = 31
np.random.seed(42)
data = {
'time': [dt.timedelta(days=v).total_seconds() * 1000 for v in range(n)],
'value': np.random.normal(loc=-5, scale=6, size=n)
}
ggplot(data) + \\
geom_line(aes('time', 'value')) + \\
scale_x_time()
"""
return _scale('x',
name=name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=None,
guide=None,
# format=format,
position=position,
#
time=True)
def scale_y_time(name=None, *,
breaks=None, labels=None, lablim=None,
limits=None,
expand=None,
na_value=None,
# format=None,
position=None
):
"""
Position scale y for data representing "time delta" values expressed in milliseconds.
Parameters
----------
name : str
The name of the scale - used as the axis label or the legend title.
If None, the default, the name of the scale
is taken from the first mapping used for that aesthetic.
breaks : list or dict
A list of data values specifying the positions of ticks, or a dictionary which maps the tick labels to the breaks values.
labels : list of str or dict
A list of labels on ticks, or a dictionary which maps the breaks values to the tick labels.
lablim : int, default=None
The maximum label length (in characters) before trimming is applied.
limits : list
A numeric vector of length two providing limits of the scale.
expand : list
A numeric vector of length two giving multiplicative and additive expansion constants.
The vector size == 1 => only multiplicative expand (and additive expand by default).
Defaults: multiplicative = 0.05, additive = 0.
na_value
Missing values will be replaced with this value.
position : str
The position of the axis:
- 'left', 'right' or 'both' for y-axis;
- 'top', 'bottom' or 'both' for x-axis.
Returns
-------
``FeatureSpec``
Scale specification.
Examples
--------
.. jupyter-execute::
:linenos:
:emphasize-lines: 13
import datetime as dt
import numpy as np
from lets_plot import *
LetsPlot.setup_html()
n = 31
np.random.seed(42)
data = {
'time': [dt.timedelta(days=v).total_seconds() * 1000 for v in range(n)],
'value': np.random.normal(loc=-5, scale=6, size=n)
}
ggplot(data) + \\
geom_line(aes('value', 'time')) + \\
scale_y_time()
"""
return _scale('y',
name=name,
breaks=breaks,
labels=labels,
lablim=lablim,
limits=limits,
expand=expand,
na_value=na_value,
trans=None,
guide=None,
# format=format,
position=position,
#
time=True)