|
|
- # Copyright 2015 Bloomberg Finance L.P.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
- r"""
-
- ======
- Scales
- ======
-
- .. currentmodule:: bqplot.scales
-
- .. autosummary::
- :toctree: _generate/
-
- Scale
- LinearScale
- LogScale
- DateScale
- OrdinalScale
- ColorScale
- DateColorScale
- OrdinalColorScale
- GeoScale
- Mercator
- AlbersUSA
- Gnomonic
- Stereographic
- """
-
- from ipywidgets import Widget, Color
- from traitlets import Unicode, List, Enum, Float, Bool, Type, Tuple
-
- import numpy as np
- from .traits import Date
- from ._version import __frontend_version__
-
-
- def register_scale(key=None):
- """Returns a decorator to register a scale type in the scale type
- registry.
-
- If no key is provided, the class name is used as a key. A key is
- provided for each core bqplot scale type so that the frontend can use
- this key regardless of the kernal language.
- """
- def wrap(scale):
- label = key if key is not None else scale.__module__ + scale.__name__
- Scale.scale_types[label] = scale
- return scale
- return wrap
-
-
- class Scale(Widget):
-
- """The base scale class.
-
- Scale objects represent a mapping between data (the domain) and a visual
- quantity (The range).
-
- Attributes
- ----------
- scale_types: dict (class-level attribute)
- A registry of existing scale types.
- domain_class: type (default: Float)
- traitlet type used to validate values in of the domain of the scale.
- reverse: bool (default: False)
- whether the scale should be reversed.
- allow_padding: bool (default: True)
- indicates whether figures are allowed to add data padding to this scale
- or not.
- precedence: int (class-level attribute)
- attribute used to determine which scale takes precedence in cases when
- two or more scales have the same rtype and dtype.
- """
- scale_types = {}
- precedence = 1
- domain_class = Type(Float)
- reverse = Bool().tag(sync=True)
- allow_padding = Bool(True).tag(sync=True)
-
- _view_name = Unicode('Scale').tag(sync=True)
- _model_name = Unicode('ScaleModel').tag(sync=True)
- _view_module = Unicode('bqplot').tag(sync=True)
- _model_module = Unicode('bqplot').tag(sync=True)
- _view_module_version = Unicode(__frontend_version__).tag(sync=True)
- _model_module_version = Unicode(__frontend_version__).tag(sync=True)
- _ipython_display_ = None # We cannot display a scale outside of a figure
-
-
- class GeoScale(Scale):
-
- """The base projection scale class for Map marks.
-
- The GeoScale represents a mapping between topographic data and a
- 2d visual representation.
- """
- _view_name = Unicode('GeoScale').tag(sync=True)
- _model_name = Unicode('GeoScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.Mercator')
- class Mercator(GeoScale):
-
- """A geographical projection scale commonly used for world maps.
-
- The Mercator projection is a cylindrical map projection which ensures that
- any course of constant bearing is a straight line.
-
- Attributes
- ----------
- scale_factor: float (default: 190)
- Specifies the scale value for the projection
- center: tuple (default: (0, 60))
- Specifies the longitude and latitude where the map is centered.
- rotate: tuple (default: (0, 0))
- Degree of rotation in each axis.
- rtype: (Number, Number) (class-level attribute)
- This attribute should not be modifed. The range type of a geo
- scale is a tuple.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
-
- scale_factor = Float(190).tag(sync=True)
- center = Tuple((0, 60)).tag(sync=True)
- rotate = Tuple((0, 0)).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('Mercator').tag(sync=True)
- _model_name = Unicode('MercatorModel').tag(sync=True)
-
-
- @register_scale('bqplot.Albers')
- class Albers(GeoScale):
-
- """A geographical scale which is an alias for a conic equal area projection.
-
- The Albers projection is a conic equal area map. It does not preserve scale
- or shape, though it is recommended for chloropleths since it preserves the
- relative areas of geographic features. Default values are US-centric.
-
- Attributes
- ----------
- scale_factor: float (default: 250)
- Specifies the scale value for the projection
- rotate: tuple (default: (96, 0))
- Degree of rotation in each axis.
- parallels: tuple (default: (29.5, 45.5))
- Sets the two parallels for the conic projection.
- center: tuple (default: (0, 60))
- Specifies the longitude and latitude where the map is centered.
- precision: float (default: 0.1)
- Specifies the threshold for the projections adaptive resampling to the
- specified value in pixels.
- rtype: (Number, Number) (class-level attribute)
- This attribute should not be modifed. The range type of a geo
- scale is a tuple.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
-
- scale_factor = Float(250).tag(sync=True)
- rotate = Tuple((96, 0)).tag(sync=True)
- center = Tuple((0, 60)).tag(sync=True)
- parallels = Tuple((29.5, 45.5)).tag(sync=True)
- precision = Float(0.1).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('Albers').tag(sync=True)
- _model_name = Unicode('AlbersModel').tag(sync=True)
-
-
- @register_scale('bqplot.AlbersUSA')
- class AlbersUSA(GeoScale):
-
- """A composite projection of four Albers projections meant specifically for
- the United States.
-
- Attributes
- ----------
- scale_factor: float (default: 1200)
- Specifies the scale value for the projection
- translate: tuple (default: (600, 490))
- rtype: (Number, Number) (class-level attribute)
- This attribute should not be modifed. The range type of a geo
- scale is a tuple.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
-
- scale_factor = Float(1200).tag(sync=True)
- translate = Tuple((600, 490)).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('AlbersUSA').tag(sync=True)
- _model_name = Unicode('AlbersUSAModel').tag(sync=True)
-
-
- @register_scale('bqplot.EquiRectangular')
- class EquiRectangular(GeoScale):
-
- """An elementary projection that uses the identity function.
-
- The projection is neither equal-area nor conformal.
-
- Attributes
- ----------
- scale_factor: float (default: 145)
- Specifies the scale value for the projection
- center: tuple (default: (0, 60))
- Specifies the longitude and latitude where the map is centered.
- """
-
- scale_factor = Float(145.0).tag(sync=True)
- center = Tuple((0, 60)).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('EquiRectangular').tag(sync=True)
- _model_name = Unicode('EquiRectangularModel').tag(sync=True)
-
-
- @register_scale('bqplot.Orthographic')
- class Orthographic(GeoScale):
-
- """A perspective projection that depicts a hemisphere as it appears from
- outer space.
-
- The projection is neither equal-area nor conformal.
-
- Attributes
- ----------
- scale_factor: float (default: 145)
- Specifies the scale value for the projection
- center: tuple (default: (0, 60))
- Specifies the longitude and latitude where the map is centered.
- rotate: tuple (default: (96, 0))
- Degree of rotation in each axis.
- clip_angle: float (default: 90.)
- Specifies the clipping circle radius to the specified angle in degrees.
- precision: float (default: 0.1)
- Specifies the threshold for the projections adaptive resampling to the
- specified value in pixels.
- """
-
- scale_factor = Float(145.0).tag(sync=True)
- center = Tuple((0, 60)).tag(sync=True)
- rotate = Tuple((0, 0)).tag(sync=True)
- clip_angle = Float(90.0, min=0.0, max=360.0).tag(sync=True)
- precision = Float(0.1).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('Orthographic').tag(sync=True)
- _model_name = Unicode('OrthographicModel').tag(sync=True)
-
-
- @register_scale('bqplot.Gnomonic')
- class Gnomonic(GeoScale):
-
- """A perspective projection which displays great circles as straight lines.
-
- The projection is neither equal-area nor conformal.
-
- Attributes
- ----------
- scale_factor: float (default: 145)
- Specifies the scale value for the projection
- center: tuple (default: (0, 60))
- Specifies the longitude and latitude where the map is centered.
- precision: float (default: 0.1)
- Specifies the threshold for the projections adaptive resampling to the
- specified value in pixels.
- clip_angle: float (default: 89.999)
- Specifies the clipping circle radius to the specified angle in degrees.
- """
-
- scale_factor = Float(145.0).tag(sync=True)
- center = Tuple((0, 60)).tag(sync=True)
- precision = Float(0.1).tag(sync=True)
- clip_angle = Float(89.999, min=0.0, max=360.0).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('Gnomonic').tag(sync=True)
- _model_name = Unicode('GnomonicModel').tag(sync=True)
-
-
- @register_scale('bqplot.Stereographic')
- class Stereographic(GeoScale):
-
- """A perspective projection that uses a bijective and smooth map at every
- point except the projection point.
-
- The projection is not an equal-area projection but it is conformal.
-
- Attributes
- ----------
- scale_factor: float (default: 250)
- Specifies the scale value for the projection
- rotate: tuple (default: (96, 0))
- Degree of rotation in each axis.
- center: tuple (default: (0, 60))
- Specifies the longitude and latitude where the map is centered.
- precision: float (default: 0.1)
- Specifies the threshold for the projections adaptive resampling to the
- specified value in pixels.
- clip_angle: float (default: 90.)
- Specifies the clipping circle radius to the specified angle in degrees.
- """
-
- scale_factor = Float(145.0).tag(sync=True)
- center = Tuple((0, 60)).tag(sync=True)
- precision = Float(0.1).tag(sync=True)
- rotate = Tuple((96, 0)).tag(sync=True)
- clip_angle = Float(179.9999, min=0.0, max=360.0).tag(sync=True)
- rtype = '(Number, Number)'
- dtype = np.number
- _view_name = Unicode('Stereographic').tag(sync=True)
- _model_name = Unicode('StereographicModel').tag(sync=True)
-
-
- @register_scale('bqplot.LinearScale')
- class LinearScale(Scale):
-
- """A linear scale.
-
- An affine mapping from a numerical domain to a numerical range.
-
- Attributes
- ----------
- min: float or None (default: None)
- if not None, min is the minimal value of the domain
- max: float or None (default: None)
- if not None, max is the maximal value of the domain
- rtype: string (class-level attribute)
- This attribute should not be modifed. The range type of a linear
- scale is numerical.
- dtype: type (class-level attribute)
- the associated data type / domain type
- precedence: int (class-level attribute, default_value=2)
- attribute used to determine which scale takes precedence in cases when
- two or more scales have the same rtype and dtype.
- default_value is 2 because for the same range and domain types,
- LinearScale should take precedence.
- stabilized: bool (default: False)
- if set to False, the domain of the scale is tied to the data range
- if set to True, the domain of the scale is updated only when
- the data range is beyond certain thresholds, given by the attributes
- mid_range and min_range.
- mid_range: float (default: 0.8)
- Proportion of the range that is spanned initially.
- Used only if stabilized is True.
- min_range: float (default: 0.6)
- Minimum proportion of the range that should be spanned by the data.
- If the data span falls beneath that level, the scale is reset.
- min_range must be <= mid_range.
- Used only if stabilized is True.
- """
- rtype = 'Number'
- dtype = np.number
- precedence = 2
- min = Float(None, allow_none=True).tag(sync=True)
- max = Float(None, allow_none=True).tag(sync=True)
- stabilized = Bool(False).tag(sync=True)
- min_range = Float(0.6, min=0.0, max=1.0).tag(sync=True)
- mid_range = Float(0.8, min=0.1, max=1.0).tag(sync=True)
-
- _view_name = Unicode('LinearScale').tag(sync=True)
- _model_name = Unicode('LinearScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.LogScale')
- class LogScale(Scale):
-
- """A log scale.
-
- A logarithmic mapping from a numerical domain to a numerical range.
-
- Attributes
- ----------
- min: float or None (default: None)
- if not None, min is the minimal value of the domain
- max: float or None (default: None)
- if not None, max is the maximal value of the domain
- rtype: string (class-level attribute)
- This attribute should not be modifed by the user.
- The range type of a linear scale is numerical.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
- rtype = 'Number'
- dtype = np.number
- min = Float(None, allow_none=True).tag(sync=True)
- max = Float(None, allow_none=True).tag(sync=True)
-
- _view_name = Unicode('LogScale').tag(sync=True)
- _model_name = Unicode('LogScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.DateScale')
- class DateScale(Scale):
-
- """A date scale, with customizable formatting.
-
- An affine mapping from dates to a numerical range.
-
- Attributes
- ----------
- min: Date or None (default: None)
- if not None, min is the minimal value of the domain
- max: Date (default: None)
- if not None, max is the maximal value of the domain
- domain_class: type (default: Date)
- traitlet type used to validate values in of the domain of the scale.
- rtype: string (class-level attribute)
- This attribute should not be modifed by the user.
- The range type of a linear scale is numerical.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
- rtype = 'Number'
- dtype = np.datetime64
- domain_class = Type(Date)
- min = Date(default_value=None, allow_none=True).tag(sync=True)
- max = Date(default_value=None, allow_none=True).tag(sync=True)
-
- _view_name = Unicode('DateScale').tag(sync=True)
- _model_name = Unicode('DateScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.OrdinalScale')
- class OrdinalScale(Scale):
-
- """An ordinal scale.
-
- A mapping from a discrete set of values to a numerical range.
-
- Attributes
- ----------
- domain: list (default: [])
- The discrete values mapped by the ordinal scale
- rtype: string (class-level attribute)
- This attribute should not be modifed by the user.
- The range type of a linear scale is numerical.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
- rtype = 'Number'
- dtype = np.str_
- domain = List().tag(sync=True)
-
- _view_name = Unicode('OrdinalScale').tag(sync=True)
- _model_name = Unicode('OrdinalScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.ColorScale')
- class ColorScale(Scale):
-
- """A color scale.
-
- A mapping from numbers to colors. The relation is affine by part.
-
- Attributes
- ----------
- scale_type: {'linear'}
- scale type
- colors: list of colors (default: [])
- list of colors
- min: float or None (default: None)
- if not None, min is the minimal value of the domain
- max: float or None (default: None)
- if not None, max is the maximal value of the domain
- mid: float or None (default: None)
- if not None, mid is the value corresponding to the mid color.
- scheme: string (default: 'RdYlGn')
- Colorbrewer color scheme of the color scale.
- extrapolation: {'constant', 'linear'} (default: 'constant')
- How to extrapolate values outside the [min, max] domain.
- rtype: string (class-level attribute)
- The range type of a color scale is 'Color'. This should not be modifed.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
- rtype = 'Color'
- dtype = np.number
- scale_type = Enum(['linear'], default_value='linear').tag(sync=True)
- colors = List(trait=Color(default_value=None, allow_none=True))\
- .tag(sync=True)
- min = Float(None, allow_none=True).tag(sync=True)
- max = Float(None, allow_none=True).tag(sync=True)
- mid = Float(None, allow_none=True).tag(sync=True)
- scheme = Unicode('RdYlGn').tag(sync=True)
- extrapolation = Enum(['constant', 'linear'], default_value='constant').tag(sync=True)
-
- _view_name = Unicode('ColorScale').tag(sync=True)
- _model_name = Unicode('ColorScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.DateColorScale')
- class DateColorScale(ColorScale):
-
- """A date color scale.
-
- A mapping from dates to a numerical domain.
-
- Attributes
- ----------
- min: Date or None (default: None)
- if not None, min is the minimal value of the domain
- max: Date or None (default: None)
- if not None, max is the maximal value of the domain
- mid: Date or None (default: None)
- if not None, mid is the value corresponding to the mid color.
- rtype: string (class-level attribute)
- This attribute should not be modifed by the user.
- The range type of a color scale is 'Color'.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
- dtype = np.datetime64
- domain_class = Type(Date)
-
- min = Date(default_value=None, allow_none=True).tag(sync=True)
- mid = Date(default_value=None, allow_none=True).tag(sync=True)
- max = Date(default_value=None, allow_none=True).tag(sync=True)
-
- _view_name = Unicode('DateColorScale').tag(sync=True)
- _model_name = Unicode('DateColorScaleModel').tag(sync=True)
-
-
- @register_scale('bqplot.OrdinalColorScale')
- class OrdinalColorScale(ColorScale):
-
- """An ordinal color scale.
-
- A mapping from a discrete set of values to colors.
-
- Attributes
- ----------
- domain: list (default: [])
- The discrete values mapped by the ordinal scales.
- rtype: string (class-level attribute)
- This attribute should not be modifed by the user.
- The range type of a color scale is 'color'.
- dtype: type (class-level attribute)
- the associated data type / domain type
- """
- rtype = 'Color'
- dtype = np.str_
- domain = List().tag(sync=True)
-
- _view_name = Unicode('OrdinalColorScale').tag(sync=True)
- _model_name = Unicode('OrdinalColorScaleModel').tag(sync=True)
|