ggplot2-python 4.0.2.9000__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ggplot2_py/__init__.py +852 -0
- ggplot2_py/_compat.py +475 -0
- ggplot2_py/_plugins.py +129 -0
- ggplot2_py/_utils.py +544 -0
- ggplot2_py/aes.py +586 -0
- ggplot2_py/annotation.py +540 -0
- ggplot2_py/coord.py +2108 -0
- ggplot2_py/coords/__init__.py +49 -0
- ggplot2_py/datasets.py +265 -0
- ggplot2_py/draw_key.py +454 -0
- ggplot2_py/facet.py +1456 -0
- ggplot2_py/fortify.py +95 -0
- ggplot2_py/geom.py +4516 -0
- ggplot2_py/geoms/__init__.py +12 -0
- ggplot2_py/ggproto.py +279 -0
- ggplot2_py/guide.py +2925 -0
- ggplot2_py/guide_axis.py +615 -0
- ggplot2_py/guide_colourbar.py +657 -0
- ggplot2_py/guide_legend.py +1061 -0
- ggplot2_py/guides/__init__.py +8 -0
- ggplot2_py/labeller.py +296 -0
- ggplot2_py/labels.py +309 -0
- ggplot2_py/layer.py +954 -0
- ggplot2_py/layout.py +754 -0
- ggplot2_py/limits.py +314 -0
- ggplot2_py/plot.py +1401 -0
- ggplot2_py/plot_render.py +866 -0
- ggplot2_py/position.py +1269 -0
- ggplot2_py/protocols.py +171 -0
- ggplot2_py/py.typed +0 -0
- ggplot2_py/qplot.py +233 -0
- ggplot2_py/resources/diamonds.csv +53941 -0
- ggplot2_py/resources/economics.csv +575 -0
- ggplot2_py/resources/economics_long.csv +2871 -0
- ggplot2_py/resources/faithfuld.csv +5626 -0
- ggplot2_py/resources/luv_colours.csv +658 -0
- ggplot2_py/resources/midwest.csv +438 -0
- ggplot2_py/resources/mpg.csv +235 -0
- ggplot2_py/resources/msleep.csv +84 -0
- ggplot2_py/resources/presidential.csv +13 -0
- ggplot2_py/resources/seals.csv +1156 -0
- ggplot2_py/resources/txhousing.csv +8603 -0
- ggplot2_py/save.py +316 -0
- ggplot2_py/scale.py +2727 -0
- ggplot2_py/scales/__init__.py +4252 -0
- ggplot2_py/stat.py +6071 -0
- ggplot2_py/stats/__init__.py +9 -0
- ggplot2_py/theme.py +490 -0
- ggplot2_py/theme_defaults.py +1350 -0
- ggplot2_py/theme_elements.py +2052 -0
- ggplot2_python-4.0.2.9000.dist-info/METADATA +179 -0
- ggplot2_python-4.0.2.9000.dist-info/RECORD +54 -0
- ggplot2_python-4.0.2.9000.dist-info/WHEEL +4 -0
- ggplot2_python-4.0.2.9000.dist-info/licenses/LICENSE +3 -0
|
@@ -0,0 +1,4252 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Scale constructor functions for ggplot2.
|
|
3
|
+
|
|
4
|
+
This module provides all ``scale_*`` factory functions that users call.
|
|
5
|
+
Each creates and returns a :class:`~ggplot2_py.scale.Scale` object configured
|
|
6
|
+
for the requested aesthetic, palette, and parameters.
|
|
7
|
+
|
|
8
|
+
Examples
|
|
9
|
+
--------
|
|
10
|
+
>>> from ggplot2_py.scales import scale_x_continuous, scale_colour_hue
|
|
11
|
+
>>> sc = scale_x_continuous(limits=[0, 10])
|
|
12
|
+
>>> sc = scale_colour_hue(l=65, c=100)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Any, Callable, List, Optional, Sequence, Union
|
|
18
|
+
|
|
19
|
+
import numpy as np
|
|
20
|
+
|
|
21
|
+
from scales import (
|
|
22
|
+
ContinuousRange,
|
|
23
|
+
DiscreteRange,
|
|
24
|
+
abs_area,
|
|
25
|
+
as_transform,
|
|
26
|
+
censor,
|
|
27
|
+
muted,
|
|
28
|
+
oob_censor,
|
|
29
|
+
oob_squish,
|
|
30
|
+
pal_area,
|
|
31
|
+
pal_brewer,
|
|
32
|
+
pal_div_gradient,
|
|
33
|
+
pal_gradient_n,
|
|
34
|
+
pal_grey,
|
|
35
|
+
pal_hue,
|
|
36
|
+
pal_identity,
|
|
37
|
+
pal_linetype,
|
|
38
|
+
pal_manual,
|
|
39
|
+
pal_rescale,
|
|
40
|
+
pal_seq_gradient,
|
|
41
|
+
pal_shape,
|
|
42
|
+
pal_viridis,
|
|
43
|
+
rescale,
|
|
44
|
+
rescale_max,
|
|
45
|
+
rescale_mid,
|
|
46
|
+
squish,
|
|
47
|
+
transform_date,
|
|
48
|
+
transform_identity,
|
|
49
|
+
transform_log10,
|
|
50
|
+
transform_reverse,
|
|
51
|
+
transform_sqrt,
|
|
52
|
+
transform_time,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
from ggplot2_py._compat import (
|
|
56
|
+
Waiver,
|
|
57
|
+
cli_abort,
|
|
58
|
+
cli_warn,
|
|
59
|
+
deprecate_warn,
|
|
60
|
+
is_waiver,
|
|
61
|
+
waiver,
|
|
62
|
+
)
|
|
63
|
+
from ggplot2_py.scale import (
|
|
64
|
+
AxisSecondary,
|
|
65
|
+
ScaleBinned,
|
|
66
|
+
ScaleBinnedPosition,
|
|
67
|
+
ScaleContinuous,
|
|
68
|
+
ScaleContinuousDate,
|
|
69
|
+
ScaleContinuousDatetime,
|
|
70
|
+
ScaleContinuousIdentity,
|
|
71
|
+
ScaleContinuousPosition,
|
|
72
|
+
ScaleDiscrete,
|
|
73
|
+
ScaleDiscreteIdentity,
|
|
74
|
+
ScaleDiscretePosition,
|
|
75
|
+
_X_AESTHETICS,
|
|
76
|
+
_Y_AESTHETICS,
|
|
77
|
+
_set_sec_axis,
|
|
78
|
+
binned_scale,
|
|
79
|
+
continuous_scale,
|
|
80
|
+
derive,
|
|
81
|
+
discrete_scale,
|
|
82
|
+
dup_axis,
|
|
83
|
+
expansion,
|
|
84
|
+
find_scale,
|
|
85
|
+
is_sec_axis,
|
|
86
|
+
scale_type,
|
|
87
|
+
sec_axis,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
__all__: List[str] = [
|
|
91
|
+
# Position continuous
|
|
92
|
+
"scale_x_continuous",
|
|
93
|
+
"scale_y_continuous",
|
|
94
|
+
"scale_x_log10",
|
|
95
|
+
"scale_y_log10",
|
|
96
|
+
"scale_x_sqrt",
|
|
97
|
+
"scale_y_sqrt",
|
|
98
|
+
"scale_x_reverse",
|
|
99
|
+
"scale_y_reverse",
|
|
100
|
+
# Position discrete
|
|
101
|
+
"scale_x_discrete",
|
|
102
|
+
"scale_y_discrete",
|
|
103
|
+
# Position binned
|
|
104
|
+
"scale_x_binned",
|
|
105
|
+
"scale_y_binned",
|
|
106
|
+
# Position date/datetime
|
|
107
|
+
"scale_x_date",
|
|
108
|
+
"scale_y_date",
|
|
109
|
+
"scale_x_datetime",
|
|
110
|
+
"scale_y_datetime",
|
|
111
|
+
"scale_x_time",
|
|
112
|
+
"scale_y_time",
|
|
113
|
+
# Colour/fill continuous
|
|
114
|
+
"scale_colour_continuous",
|
|
115
|
+
"scale_fill_continuous",
|
|
116
|
+
"scale_colour_gradient",
|
|
117
|
+
"scale_fill_gradient",
|
|
118
|
+
"scale_colour_gradient2",
|
|
119
|
+
"scale_fill_gradient2",
|
|
120
|
+
"scale_colour_gradientn",
|
|
121
|
+
"scale_fill_gradientn",
|
|
122
|
+
# Colour/fill discrete
|
|
123
|
+
"scale_colour_discrete",
|
|
124
|
+
"scale_fill_discrete",
|
|
125
|
+
"scale_colour_hue",
|
|
126
|
+
"scale_fill_hue",
|
|
127
|
+
"scale_colour_brewer",
|
|
128
|
+
"scale_fill_brewer",
|
|
129
|
+
"scale_colour_grey",
|
|
130
|
+
"scale_fill_grey",
|
|
131
|
+
# Colour/fill viridis
|
|
132
|
+
"scale_colour_viridis_c",
|
|
133
|
+
"scale_fill_viridis_c",
|
|
134
|
+
"scale_colour_viridis_d",
|
|
135
|
+
"scale_fill_viridis_d",
|
|
136
|
+
"scale_colour_viridis_b",
|
|
137
|
+
"scale_fill_viridis_b",
|
|
138
|
+
# Colour/fill distiller/fermenter
|
|
139
|
+
"scale_colour_distiller",
|
|
140
|
+
"scale_fill_distiller",
|
|
141
|
+
"scale_colour_fermenter",
|
|
142
|
+
"scale_fill_fermenter",
|
|
143
|
+
# Colour/fill binned / steps
|
|
144
|
+
"scale_colour_binned",
|
|
145
|
+
"scale_fill_binned",
|
|
146
|
+
"scale_colour_steps",
|
|
147
|
+
"scale_fill_steps",
|
|
148
|
+
"scale_colour_steps2",
|
|
149
|
+
"scale_fill_steps2",
|
|
150
|
+
"scale_colour_stepsn",
|
|
151
|
+
"scale_fill_stepsn",
|
|
152
|
+
# Colour/fill identity / manual
|
|
153
|
+
"scale_colour_identity",
|
|
154
|
+
"scale_fill_identity",
|
|
155
|
+
"scale_colour_manual",
|
|
156
|
+
"scale_fill_manual",
|
|
157
|
+
# Colour/fill date/datetime/ordinal
|
|
158
|
+
"scale_colour_date",
|
|
159
|
+
"scale_fill_date",
|
|
160
|
+
"scale_colour_datetime",
|
|
161
|
+
"scale_fill_datetime",
|
|
162
|
+
"scale_colour_ordinal",
|
|
163
|
+
"scale_fill_ordinal",
|
|
164
|
+
# American spelling aliases
|
|
165
|
+
"scale_color_continuous",
|
|
166
|
+
"scale_color_discrete",
|
|
167
|
+
"scale_color_gradient",
|
|
168
|
+
"scale_color_gradient2",
|
|
169
|
+
"scale_color_gradientn",
|
|
170
|
+
"scale_color_hue",
|
|
171
|
+
"scale_color_brewer",
|
|
172
|
+
"scale_color_distiller",
|
|
173
|
+
"scale_color_fermenter",
|
|
174
|
+
"scale_color_grey",
|
|
175
|
+
"scale_color_viridis_c",
|
|
176
|
+
"scale_color_viridis_d",
|
|
177
|
+
"scale_color_viridis_b",
|
|
178
|
+
"scale_color_binned",
|
|
179
|
+
"scale_color_steps",
|
|
180
|
+
"scale_color_steps2",
|
|
181
|
+
"scale_color_stepsn",
|
|
182
|
+
"scale_color_identity",
|
|
183
|
+
"scale_color_manual",
|
|
184
|
+
"scale_color_date",
|
|
185
|
+
"scale_color_datetime",
|
|
186
|
+
"scale_color_ordinal",
|
|
187
|
+
# Alpha
|
|
188
|
+
"scale_alpha",
|
|
189
|
+
"scale_alpha_continuous",
|
|
190
|
+
"scale_alpha_discrete",
|
|
191
|
+
"scale_alpha_binned",
|
|
192
|
+
"scale_alpha_identity",
|
|
193
|
+
"scale_alpha_manual",
|
|
194
|
+
"scale_alpha_ordinal",
|
|
195
|
+
"scale_alpha_date",
|
|
196
|
+
"scale_alpha_datetime",
|
|
197
|
+
# Size
|
|
198
|
+
"scale_size",
|
|
199
|
+
"scale_size_continuous",
|
|
200
|
+
"scale_size_discrete",
|
|
201
|
+
"scale_size_binned",
|
|
202
|
+
"scale_size_area",
|
|
203
|
+
"scale_size_binned_area",
|
|
204
|
+
"scale_size_identity",
|
|
205
|
+
"scale_size_manual",
|
|
206
|
+
"scale_size_ordinal",
|
|
207
|
+
"scale_size_date",
|
|
208
|
+
"scale_size_datetime",
|
|
209
|
+
"scale_radius",
|
|
210
|
+
# Shape
|
|
211
|
+
"scale_shape",
|
|
212
|
+
"scale_shape_discrete",
|
|
213
|
+
"scale_shape_binned",
|
|
214
|
+
"scale_shape_continuous",
|
|
215
|
+
"scale_shape_identity",
|
|
216
|
+
"scale_shape_manual",
|
|
217
|
+
"scale_shape_ordinal",
|
|
218
|
+
# Linetype
|
|
219
|
+
"scale_linetype",
|
|
220
|
+
"scale_linetype_discrete",
|
|
221
|
+
"scale_linetype_ordinal",
|
|
222
|
+
"scale_linetype_continuous",
|
|
223
|
+
"scale_linetype_binned",
|
|
224
|
+
"scale_linetype_identity",
|
|
225
|
+
"scale_linetype_manual",
|
|
226
|
+
# Linewidth
|
|
227
|
+
"scale_linewidth",
|
|
228
|
+
"scale_linewidth_continuous",
|
|
229
|
+
"scale_linewidth_discrete",
|
|
230
|
+
"scale_linewidth_binned",
|
|
231
|
+
"scale_linewidth_identity",
|
|
232
|
+
"scale_linewidth_manual",
|
|
233
|
+
"scale_linewidth_ordinal",
|
|
234
|
+
"scale_linewidth_date",
|
|
235
|
+
"scale_linewidth_datetime",
|
|
236
|
+
"scale_stroke",
|
|
237
|
+
"scale_stroke_continuous",
|
|
238
|
+
"scale_stroke_discrete",
|
|
239
|
+
"scale_stroke_binned",
|
|
240
|
+
"scale_stroke_identity",
|
|
241
|
+
"scale_stroke_manual",
|
|
242
|
+
"scale_stroke_ordinal",
|
|
243
|
+
# Generic identity / manual
|
|
244
|
+
"scale_continuous_identity",
|
|
245
|
+
"scale_discrete_identity",
|
|
246
|
+
"scale_discrete_manual",
|
|
247
|
+
# Helpers re-exported
|
|
248
|
+
"scale_type",
|
|
249
|
+
"find_scale",
|
|
250
|
+
"expansion",
|
|
251
|
+
"sec_axis",
|
|
252
|
+
"dup_axis",
|
|
253
|
+
"derive",
|
|
254
|
+
"continuous_scale",
|
|
255
|
+
"discrete_scale",
|
|
256
|
+
"binned_scale",
|
|
257
|
+
]
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
# =========================================================================
|
|
261
|
+
# Internal helpers
|
|
262
|
+
# =========================================================================
|
|
263
|
+
|
|
264
|
+
def _identity(x: Any) -> Any:
|
|
265
|
+
"""Identity function used as default palette for position scales."""
|
|
266
|
+
return x
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _seq_len(n: int) -> List[int]:
|
|
270
|
+
"""Return ``list(range(1, n+1))``."""
|
|
271
|
+
return list(range(1, n + 1))
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def _mid_rescaler(
|
|
275
|
+
mid: float = 0,
|
|
276
|
+
transform: Union[str, Any] = "identity",
|
|
277
|
+
) -> Callable:
|
|
278
|
+
"""Return a rescaler centred on *mid*.
|
|
279
|
+
|
|
280
|
+
Parameters
|
|
281
|
+
----------
|
|
282
|
+
mid : float
|
|
283
|
+
Midpoint in data space.
|
|
284
|
+
transform : str or Transform
|
|
285
|
+
Transformation object.
|
|
286
|
+
|
|
287
|
+
Returns
|
|
288
|
+
-------
|
|
289
|
+
callable
|
|
290
|
+
"""
|
|
291
|
+
if isinstance(transform, str):
|
|
292
|
+
transform = as_transform(transform)
|
|
293
|
+
trans_mid = float(transform.transform(np.array([mid]))[0])
|
|
294
|
+
|
|
295
|
+
def _rescaler(x: Any, _from: Any = None, **kwargs: Any) -> Any:
|
|
296
|
+
if _from is None:
|
|
297
|
+
x_arr = np.asarray(x, dtype=float)
|
|
298
|
+
_from = np.array([np.nanmin(x_arr), np.nanmax(x_arr)])
|
|
299
|
+
return rescale_mid(x, to=np.array([0.0, 1.0]), from_range=_from, mid=trans_mid)
|
|
300
|
+
|
|
301
|
+
return _rescaler
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
def _manual_scale(
|
|
305
|
+
aesthetic: Union[str, List[str]],
|
|
306
|
+
values: Any = None,
|
|
307
|
+
breaks: Any = None,
|
|
308
|
+
*,
|
|
309
|
+
name: Any = None,
|
|
310
|
+
na_value: Any = np.nan,
|
|
311
|
+
**kwargs: Any,
|
|
312
|
+
) -> ScaleDiscrete:
|
|
313
|
+
"""Internal helper for manual scales.
|
|
314
|
+
|
|
315
|
+
Parameters
|
|
316
|
+
----------
|
|
317
|
+
aesthetic : str or list of str
|
|
318
|
+
Aesthetics.
|
|
319
|
+
values : dict or list
|
|
320
|
+
Manual values.
|
|
321
|
+
breaks : any
|
|
322
|
+
Break specification.
|
|
323
|
+
name : any, optional
|
|
324
|
+
Scale title.
|
|
325
|
+
na_value : any
|
|
326
|
+
Missing-data value.
|
|
327
|
+
**kwargs
|
|
328
|
+
Extra arguments passed to ``discrete_scale``.
|
|
329
|
+
|
|
330
|
+
Returns
|
|
331
|
+
-------
|
|
332
|
+
ScaleDiscrete
|
|
333
|
+
"""
|
|
334
|
+
if name is None:
|
|
335
|
+
name = waiver()
|
|
336
|
+
if breaks is None:
|
|
337
|
+
breaks = waiver()
|
|
338
|
+
|
|
339
|
+
limits = kwargs.pop("limits", None)
|
|
340
|
+
|
|
341
|
+
if values is None:
|
|
342
|
+
values = []
|
|
343
|
+
|
|
344
|
+
if isinstance(values, dict):
|
|
345
|
+
if limits is None:
|
|
346
|
+
_values_dict = values
|
|
347
|
+
|
|
348
|
+
def _limits_func(x: Any) -> Any:
|
|
349
|
+
keys = list(_values_dict.keys())
|
|
350
|
+
x_list = list(x) if not isinstance(x, list) else x
|
|
351
|
+
shared = [v for v in x_list if v in keys or str(v) in keys]
|
|
352
|
+
if not shared:
|
|
353
|
+
shared = [v for v in x_list if v is not None and not (isinstance(v, float) and np.isnan(v))]
|
|
354
|
+
return shared if shared else x_list
|
|
355
|
+
|
|
356
|
+
limits = _limits_func
|
|
357
|
+
|
|
358
|
+
# Order values by breaks if values is a plain list
|
|
359
|
+
if (
|
|
360
|
+
isinstance(values, (list, np.ndarray))
|
|
361
|
+
and not isinstance(values, dict)
|
|
362
|
+
and not is_waiver(breaks)
|
|
363
|
+
and breaks is not None
|
|
364
|
+
and not callable(breaks)
|
|
365
|
+
):
|
|
366
|
+
values_list = list(values)
|
|
367
|
+
breaks_list = list(breaks)
|
|
368
|
+
named_values = {}
|
|
369
|
+
for i, b in enumerate(breaks_list):
|
|
370
|
+
if i < len(values_list):
|
|
371
|
+
named_values[b] = values_list[i]
|
|
372
|
+
values = named_values
|
|
373
|
+
|
|
374
|
+
if isinstance(values, dict):
|
|
375
|
+
_vals = values
|
|
376
|
+
|
|
377
|
+
def pal(n: int) -> list:
|
|
378
|
+
return list(_vals.values())[:n] if len(_vals) >= n else list(_vals.values())
|
|
379
|
+
else:
|
|
380
|
+
_vals_list = list(values)
|
|
381
|
+
|
|
382
|
+
def pal(n: int) -> list:
|
|
383
|
+
if n > len(_vals_list):
|
|
384
|
+
cli_abort(
|
|
385
|
+
f"Insufficient values in manual scale. {n} needed but only {len(_vals_list)} provided."
|
|
386
|
+
)
|
|
387
|
+
return _vals_list[:n]
|
|
388
|
+
|
|
389
|
+
return discrete_scale(
|
|
390
|
+
aesthetic,
|
|
391
|
+
palette=pal,
|
|
392
|
+
name=name,
|
|
393
|
+
breaks=breaks,
|
|
394
|
+
limits=limits,
|
|
395
|
+
na_value=na_value,
|
|
396
|
+
**kwargs,
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
# =========================================================================
|
|
401
|
+
# Position continuous scales
|
|
402
|
+
# =========================================================================
|
|
403
|
+
|
|
404
|
+
def scale_x_continuous(
|
|
405
|
+
name: Any = None,
|
|
406
|
+
*,
|
|
407
|
+
breaks: Any = None,
|
|
408
|
+
minor_breaks: Any = None,
|
|
409
|
+
n_breaks: Optional[int] = None,
|
|
410
|
+
labels: Any = None,
|
|
411
|
+
limits: Optional[Any] = None,
|
|
412
|
+
expand: Any = None,
|
|
413
|
+
oob: Optional[Callable] = None,
|
|
414
|
+
na_value: float = np.nan,
|
|
415
|
+
transform: Union[str, Any] = "identity",
|
|
416
|
+
trans: Optional[Any] = None,
|
|
417
|
+
guide: Any = None,
|
|
418
|
+
position: str = "bottom",
|
|
419
|
+
sec_axis: Any = None,
|
|
420
|
+
) -> ScaleContinuousPosition:
|
|
421
|
+
"""Continuous scale for the x position aesthetic.
|
|
422
|
+
|
|
423
|
+
Parameters
|
|
424
|
+
----------
|
|
425
|
+
name : str or Waiver, optional
|
|
426
|
+
Scale title.
|
|
427
|
+
breaks : array-like, callable, or None
|
|
428
|
+
Break specification.
|
|
429
|
+
minor_breaks : array-like, callable, or None
|
|
430
|
+
Minor break specification.
|
|
431
|
+
n_breaks : int, optional
|
|
432
|
+
Desired number of breaks.
|
|
433
|
+
labels : array-like, callable, or None
|
|
434
|
+
Label specification.
|
|
435
|
+
limits : array-like or None
|
|
436
|
+
Scale limits.
|
|
437
|
+
expand : array-like or Waiver, optional
|
|
438
|
+
Expansion.
|
|
439
|
+
oob : callable, optional
|
|
440
|
+
Out-of-bounds handler.
|
|
441
|
+
na_value : float
|
|
442
|
+
Value for missing data.
|
|
443
|
+
transform : str or Transform
|
|
444
|
+
Transformation.
|
|
445
|
+
trans : str or Transform, optional
|
|
446
|
+
Deprecated alias for *transform*.
|
|
447
|
+
guide : any, optional
|
|
448
|
+
Guide specification.
|
|
449
|
+
position : str
|
|
450
|
+
Axis position.
|
|
451
|
+
sec_axis : AxisSecondary or Waiver, optional
|
|
452
|
+
Secondary axis specification.
|
|
453
|
+
|
|
454
|
+
Returns
|
|
455
|
+
-------
|
|
456
|
+
ScaleContinuousPosition
|
|
457
|
+
"""
|
|
458
|
+
if guide is None:
|
|
459
|
+
guide = waiver()
|
|
460
|
+
if oob is None:
|
|
461
|
+
oob = censor
|
|
462
|
+
if sec_axis is None:
|
|
463
|
+
sec_axis_obj = waiver()
|
|
464
|
+
else:
|
|
465
|
+
sec_axis_obj = sec_axis
|
|
466
|
+
|
|
467
|
+
sc = continuous_scale(
|
|
468
|
+
_X_AESTHETICS,
|
|
469
|
+
palette=_identity,
|
|
470
|
+
name=name,
|
|
471
|
+
breaks=breaks,
|
|
472
|
+
n_breaks=n_breaks,
|
|
473
|
+
minor_breaks=minor_breaks,
|
|
474
|
+
labels=labels,
|
|
475
|
+
limits=limits,
|
|
476
|
+
expand=expand,
|
|
477
|
+
oob=oob,
|
|
478
|
+
na_value=na_value,
|
|
479
|
+
transform=transform,
|
|
480
|
+
trans=trans,
|
|
481
|
+
guide=guide,
|
|
482
|
+
position=position,
|
|
483
|
+
super_class=ScaleContinuousPosition,
|
|
484
|
+
)
|
|
485
|
+
return _set_sec_axis(sec_axis_obj, sc)
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
def scale_y_continuous(
|
|
489
|
+
name: Any = None,
|
|
490
|
+
*,
|
|
491
|
+
breaks: Any = None,
|
|
492
|
+
minor_breaks: Any = None,
|
|
493
|
+
n_breaks: Optional[int] = None,
|
|
494
|
+
labels: Any = None,
|
|
495
|
+
limits: Optional[Any] = None,
|
|
496
|
+
expand: Any = None,
|
|
497
|
+
oob: Optional[Callable] = None,
|
|
498
|
+
na_value: float = np.nan,
|
|
499
|
+
transform: Union[str, Any] = "identity",
|
|
500
|
+
trans: Optional[Any] = None,
|
|
501
|
+
guide: Any = None,
|
|
502
|
+
position: str = "left",
|
|
503
|
+
sec_axis: Any = None,
|
|
504
|
+
) -> ScaleContinuousPosition:
|
|
505
|
+
"""Continuous scale for the y position aesthetic.
|
|
506
|
+
|
|
507
|
+
Parameters
|
|
508
|
+
----------
|
|
509
|
+
name : str or Waiver, optional
|
|
510
|
+
Scale title.
|
|
511
|
+
breaks, minor_breaks, n_breaks, labels, limits, expand, oob, na_value,
|
|
512
|
+
transform, trans, guide, position, sec_axis
|
|
513
|
+
See :func:`scale_x_continuous`.
|
|
514
|
+
|
|
515
|
+
Returns
|
|
516
|
+
-------
|
|
517
|
+
ScaleContinuousPosition
|
|
518
|
+
"""
|
|
519
|
+
if guide is None:
|
|
520
|
+
guide = waiver()
|
|
521
|
+
if oob is None:
|
|
522
|
+
oob = censor
|
|
523
|
+
if sec_axis is None:
|
|
524
|
+
sec_axis_obj = waiver()
|
|
525
|
+
else:
|
|
526
|
+
sec_axis_obj = sec_axis
|
|
527
|
+
|
|
528
|
+
sc = continuous_scale(
|
|
529
|
+
_Y_AESTHETICS,
|
|
530
|
+
palette=_identity,
|
|
531
|
+
name=name,
|
|
532
|
+
breaks=breaks,
|
|
533
|
+
n_breaks=n_breaks,
|
|
534
|
+
minor_breaks=minor_breaks,
|
|
535
|
+
labels=labels,
|
|
536
|
+
limits=limits,
|
|
537
|
+
expand=expand,
|
|
538
|
+
oob=oob,
|
|
539
|
+
na_value=na_value,
|
|
540
|
+
transform=transform,
|
|
541
|
+
trans=trans,
|
|
542
|
+
guide=guide,
|
|
543
|
+
position=position,
|
|
544
|
+
super_class=ScaleContinuousPosition,
|
|
545
|
+
)
|
|
546
|
+
return _set_sec_axis(sec_axis_obj, sc)
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
def scale_x_log10(**kwargs: Any) -> ScaleContinuousPosition:
|
|
550
|
+
"""Log10-transformed continuous x scale.
|
|
551
|
+
|
|
552
|
+
Parameters
|
|
553
|
+
----------
|
|
554
|
+
**kwargs
|
|
555
|
+
Passed to :func:`scale_x_continuous`.
|
|
556
|
+
|
|
557
|
+
Returns
|
|
558
|
+
-------
|
|
559
|
+
ScaleContinuousPosition
|
|
560
|
+
"""
|
|
561
|
+
kwargs.setdefault("transform", transform_log10())
|
|
562
|
+
return scale_x_continuous(**kwargs)
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
def scale_y_log10(**kwargs: Any) -> ScaleContinuousPosition:
|
|
566
|
+
"""Log10-transformed continuous y scale.
|
|
567
|
+
|
|
568
|
+
Parameters
|
|
569
|
+
----------
|
|
570
|
+
**kwargs
|
|
571
|
+
Passed to :func:`scale_y_continuous`.
|
|
572
|
+
|
|
573
|
+
Returns
|
|
574
|
+
-------
|
|
575
|
+
ScaleContinuousPosition
|
|
576
|
+
"""
|
|
577
|
+
kwargs.setdefault("transform", transform_log10())
|
|
578
|
+
return scale_y_continuous(**kwargs)
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
def scale_x_sqrt(**kwargs: Any) -> ScaleContinuousPosition:
|
|
582
|
+
"""Square-root-transformed continuous x scale.
|
|
583
|
+
|
|
584
|
+
Parameters
|
|
585
|
+
----------
|
|
586
|
+
**kwargs
|
|
587
|
+
Passed to :func:`scale_x_continuous`.
|
|
588
|
+
|
|
589
|
+
Returns
|
|
590
|
+
-------
|
|
591
|
+
ScaleContinuousPosition
|
|
592
|
+
"""
|
|
593
|
+
kwargs.setdefault("transform", transform_sqrt())
|
|
594
|
+
return scale_x_continuous(**kwargs)
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
def scale_y_sqrt(**kwargs: Any) -> ScaleContinuousPosition:
|
|
598
|
+
"""Square-root-transformed continuous y scale.
|
|
599
|
+
|
|
600
|
+
Parameters
|
|
601
|
+
----------
|
|
602
|
+
**kwargs
|
|
603
|
+
Passed to :func:`scale_y_continuous`.
|
|
604
|
+
|
|
605
|
+
Returns
|
|
606
|
+
-------
|
|
607
|
+
ScaleContinuousPosition
|
|
608
|
+
"""
|
|
609
|
+
kwargs.setdefault("transform", transform_sqrt())
|
|
610
|
+
return scale_y_continuous(**kwargs)
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
def scale_x_reverse(**kwargs: Any) -> ScaleContinuousPosition:
|
|
614
|
+
"""Reverse-transformed continuous x scale.
|
|
615
|
+
|
|
616
|
+
Parameters
|
|
617
|
+
----------
|
|
618
|
+
**kwargs
|
|
619
|
+
Passed to :func:`scale_x_continuous`.
|
|
620
|
+
|
|
621
|
+
Returns
|
|
622
|
+
-------
|
|
623
|
+
ScaleContinuousPosition
|
|
624
|
+
"""
|
|
625
|
+
kwargs.setdefault("transform", transform_reverse())
|
|
626
|
+
return scale_x_continuous(**kwargs)
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
def scale_y_reverse(**kwargs: Any) -> ScaleContinuousPosition:
|
|
630
|
+
"""Reverse-transformed continuous y scale.
|
|
631
|
+
|
|
632
|
+
Parameters
|
|
633
|
+
----------
|
|
634
|
+
**kwargs
|
|
635
|
+
Passed to :func:`scale_y_continuous`.
|
|
636
|
+
|
|
637
|
+
Returns
|
|
638
|
+
-------
|
|
639
|
+
ScaleContinuousPosition
|
|
640
|
+
"""
|
|
641
|
+
kwargs.setdefault("transform", transform_reverse())
|
|
642
|
+
return scale_y_continuous(**kwargs)
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
# =========================================================================
|
|
646
|
+
# Position discrete scales
|
|
647
|
+
# =========================================================================
|
|
648
|
+
|
|
649
|
+
def scale_x_discrete(
|
|
650
|
+
name: Any = None,
|
|
651
|
+
*,
|
|
652
|
+
palette: Optional[Callable] = None,
|
|
653
|
+
expand: Any = None,
|
|
654
|
+
guide: Any = None,
|
|
655
|
+
position: str = "bottom",
|
|
656
|
+
sec_axis: Any = None,
|
|
657
|
+
continuous_limits: Optional[Any] = None,
|
|
658
|
+
**kwargs: Any,
|
|
659
|
+
) -> ScaleDiscretePosition:
|
|
660
|
+
"""Discrete scale for the x position aesthetic.
|
|
661
|
+
|
|
662
|
+
Parameters
|
|
663
|
+
----------
|
|
664
|
+
name : str or Waiver, optional
|
|
665
|
+
Scale title.
|
|
666
|
+
palette : callable, optional
|
|
667
|
+
Palette function.
|
|
668
|
+
expand : array-like or Waiver, optional
|
|
669
|
+
Expansion.
|
|
670
|
+
guide : any, optional
|
|
671
|
+
Guide specification.
|
|
672
|
+
position : str
|
|
673
|
+
Axis position.
|
|
674
|
+
sec_axis : AxisSecondary or Waiver, optional
|
|
675
|
+
Secondary axis specification.
|
|
676
|
+
continuous_limits : array-like, optional
|
|
677
|
+
Display range for continuous data on a discrete scale.
|
|
678
|
+
**kwargs
|
|
679
|
+
Extra arguments passed to ``discrete_scale``.
|
|
680
|
+
|
|
681
|
+
Returns
|
|
682
|
+
-------
|
|
683
|
+
ScaleDiscretePosition
|
|
684
|
+
"""
|
|
685
|
+
if palette is None:
|
|
686
|
+
palette = _seq_len
|
|
687
|
+
if guide is None:
|
|
688
|
+
guide = waiver()
|
|
689
|
+
if sec_axis is None:
|
|
690
|
+
sec_axis_obj = waiver()
|
|
691
|
+
else:
|
|
692
|
+
sec_axis_obj = sec_axis
|
|
693
|
+
|
|
694
|
+
sc = discrete_scale(
|
|
695
|
+
_X_AESTHETICS,
|
|
696
|
+
palette=palette,
|
|
697
|
+
name=name,
|
|
698
|
+
expand=expand,
|
|
699
|
+
guide=guide,
|
|
700
|
+
position=position,
|
|
701
|
+
super_class=ScaleDiscretePosition,
|
|
702
|
+
**kwargs,
|
|
703
|
+
)
|
|
704
|
+
sc.range_c = ContinuousRange()
|
|
705
|
+
sc.continuous_limits = continuous_limits
|
|
706
|
+
return _set_sec_axis(sec_axis_obj, sc)
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
def scale_y_discrete(
|
|
710
|
+
name: Any = None,
|
|
711
|
+
*,
|
|
712
|
+
palette: Optional[Callable] = None,
|
|
713
|
+
expand: Any = None,
|
|
714
|
+
guide: Any = None,
|
|
715
|
+
position: str = "left",
|
|
716
|
+
sec_axis: Any = None,
|
|
717
|
+
continuous_limits: Optional[Any] = None,
|
|
718
|
+
**kwargs: Any,
|
|
719
|
+
) -> ScaleDiscretePosition:
|
|
720
|
+
"""Discrete scale for the y position aesthetic.
|
|
721
|
+
|
|
722
|
+
Parameters
|
|
723
|
+
----------
|
|
724
|
+
name : str or Waiver, optional
|
|
725
|
+
Scale title.
|
|
726
|
+
palette, expand, guide, position, sec_axis, continuous_limits
|
|
727
|
+
See :func:`scale_x_discrete`.
|
|
728
|
+
**kwargs
|
|
729
|
+
Extra arguments passed to ``discrete_scale``.
|
|
730
|
+
|
|
731
|
+
Returns
|
|
732
|
+
-------
|
|
733
|
+
ScaleDiscretePosition
|
|
734
|
+
"""
|
|
735
|
+
if palette is None:
|
|
736
|
+
palette = _seq_len
|
|
737
|
+
if guide is None:
|
|
738
|
+
guide = waiver()
|
|
739
|
+
if sec_axis is None:
|
|
740
|
+
sec_axis_obj = waiver()
|
|
741
|
+
else:
|
|
742
|
+
sec_axis_obj = sec_axis
|
|
743
|
+
|
|
744
|
+
sc = discrete_scale(
|
|
745
|
+
_Y_AESTHETICS,
|
|
746
|
+
palette=palette,
|
|
747
|
+
name=name,
|
|
748
|
+
expand=expand,
|
|
749
|
+
guide=guide,
|
|
750
|
+
position=position,
|
|
751
|
+
super_class=ScaleDiscretePosition,
|
|
752
|
+
**kwargs,
|
|
753
|
+
)
|
|
754
|
+
sc.range_c = ContinuousRange()
|
|
755
|
+
sc.continuous_limits = continuous_limits
|
|
756
|
+
return _set_sec_axis(sec_axis_obj, sc)
|
|
757
|
+
|
|
758
|
+
|
|
759
|
+
# =========================================================================
|
|
760
|
+
# Position binned scales
|
|
761
|
+
# =========================================================================
|
|
762
|
+
|
|
763
|
+
def scale_x_binned(
|
|
764
|
+
name: Any = None,
|
|
765
|
+
*,
|
|
766
|
+
n_breaks: int = 10,
|
|
767
|
+
nice_breaks: bool = True,
|
|
768
|
+
breaks: Any = None,
|
|
769
|
+
labels: Any = None,
|
|
770
|
+
limits: Optional[Any] = None,
|
|
771
|
+
expand: Any = None,
|
|
772
|
+
oob: Optional[Callable] = None,
|
|
773
|
+
na_value: float = np.nan,
|
|
774
|
+
right: bool = True,
|
|
775
|
+
show_limits: bool = False,
|
|
776
|
+
transform: Union[str, Any] = "identity",
|
|
777
|
+
trans: Optional[Any] = None,
|
|
778
|
+
guide: Any = None,
|
|
779
|
+
position: str = "bottom",
|
|
780
|
+
) -> ScaleBinnedPosition:
|
|
781
|
+
"""Binned scale for the x position aesthetic.
|
|
782
|
+
|
|
783
|
+
Parameters
|
|
784
|
+
----------
|
|
785
|
+
name : str or Waiver, optional
|
|
786
|
+
Scale title.
|
|
787
|
+
n_breaks : int
|
|
788
|
+
Number of breaks.
|
|
789
|
+
nice_breaks : bool
|
|
790
|
+
Whether to use nice breaks.
|
|
791
|
+
breaks, labels, limits, expand, oob, na_value, right, show_limits,
|
|
792
|
+
transform, trans, guide, position
|
|
793
|
+
See :func:`binned_scale`.
|
|
794
|
+
|
|
795
|
+
Returns
|
|
796
|
+
-------
|
|
797
|
+
ScaleBinnedPosition
|
|
798
|
+
"""
|
|
799
|
+
if guide is None:
|
|
800
|
+
guide = waiver()
|
|
801
|
+
if oob is None:
|
|
802
|
+
oob = squish
|
|
803
|
+
return binned_scale(
|
|
804
|
+
_X_AESTHETICS,
|
|
805
|
+
palette=_identity,
|
|
806
|
+
name=name,
|
|
807
|
+
breaks=breaks,
|
|
808
|
+
labels=labels,
|
|
809
|
+
limits=limits,
|
|
810
|
+
expand=expand,
|
|
811
|
+
oob=oob,
|
|
812
|
+
na_value=na_value,
|
|
813
|
+
n_breaks=n_breaks,
|
|
814
|
+
nice_breaks=nice_breaks,
|
|
815
|
+
right=right,
|
|
816
|
+
transform=transform,
|
|
817
|
+
trans=trans,
|
|
818
|
+
show_limits=show_limits,
|
|
819
|
+
guide=guide,
|
|
820
|
+
position=position,
|
|
821
|
+
super_class=ScaleBinnedPosition,
|
|
822
|
+
)
|
|
823
|
+
|
|
824
|
+
|
|
825
|
+
def scale_y_binned(
|
|
826
|
+
name: Any = None,
|
|
827
|
+
*,
|
|
828
|
+
n_breaks: int = 10,
|
|
829
|
+
nice_breaks: bool = True,
|
|
830
|
+
breaks: Any = None,
|
|
831
|
+
labels: Any = None,
|
|
832
|
+
limits: Optional[Any] = None,
|
|
833
|
+
expand: Any = None,
|
|
834
|
+
oob: Optional[Callable] = None,
|
|
835
|
+
na_value: float = np.nan,
|
|
836
|
+
right: bool = True,
|
|
837
|
+
show_limits: bool = False,
|
|
838
|
+
transform: Union[str, Any] = "identity",
|
|
839
|
+
trans: Optional[Any] = None,
|
|
840
|
+
guide: Any = None,
|
|
841
|
+
position: str = "left",
|
|
842
|
+
) -> ScaleBinnedPosition:
|
|
843
|
+
"""Binned scale for the y position aesthetic.
|
|
844
|
+
|
|
845
|
+
Parameters
|
|
846
|
+
----------
|
|
847
|
+
name : str or Waiver, optional
|
|
848
|
+
Scale title.
|
|
849
|
+
n_breaks, nice_breaks, breaks, labels, limits, expand, oob, na_value,
|
|
850
|
+
right, show_limits, transform, trans, guide, position
|
|
851
|
+
See :func:`scale_x_binned`.
|
|
852
|
+
|
|
853
|
+
Returns
|
|
854
|
+
-------
|
|
855
|
+
ScaleBinnedPosition
|
|
856
|
+
"""
|
|
857
|
+
if guide is None:
|
|
858
|
+
guide = waiver()
|
|
859
|
+
if oob is None:
|
|
860
|
+
oob = squish
|
|
861
|
+
return binned_scale(
|
|
862
|
+
_Y_AESTHETICS,
|
|
863
|
+
palette=_identity,
|
|
864
|
+
name=name,
|
|
865
|
+
breaks=breaks,
|
|
866
|
+
labels=labels,
|
|
867
|
+
limits=limits,
|
|
868
|
+
expand=expand,
|
|
869
|
+
oob=oob,
|
|
870
|
+
na_value=na_value,
|
|
871
|
+
n_breaks=n_breaks,
|
|
872
|
+
nice_breaks=nice_breaks,
|
|
873
|
+
right=right,
|
|
874
|
+
transform=transform,
|
|
875
|
+
trans=trans,
|
|
876
|
+
show_limits=show_limits,
|
|
877
|
+
guide=guide,
|
|
878
|
+
position=position,
|
|
879
|
+
super_class=ScaleBinnedPosition,
|
|
880
|
+
)
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
# =========================================================================
|
|
884
|
+
# Position date/datetime/time scales
|
|
885
|
+
# =========================================================================
|
|
886
|
+
|
|
887
|
+
def scale_x_date(
|
|
888
|
+
name: Any = None,
|
|
889
|
+
*,
|
|
890
|
+
breaks: Any = None,
|
|
891
|
+
date_breaks: Optional[str] = None,
|
|
892
|
+
labels: Any = None,
|
|
893
|
+
date_labels: Optional[str] = None,
|
|
894
|
+
minor_breaks: Any = None,
|
|
895
|
+
date_minor_breaks: Optional[str] = None,
|
|
896
|
+
limits: Optional[Any] = None,
|
|
897
|
+
expand: Any = None,
|
|
898
|
+
oob: Optional[Callable] = None,
|
|
899
|
+
guide: Any = None,
|
|
900
|
+
position: str = "bottom",
|
|
901
|
+
sec_axis: Any = None,
|
|
902
|
+
) -> ScaleContinuousPosition:
|
|
903
|
+
"""Date scale for the x position aesthetic.
|
|
904
|
+
|
|
905
|
+
Parameters
|
|
906
|
+
----------
|
|
907
|
+
name : str or Waiver, optional
|
|
908
|
+
Scale title.
|
|
909
|
+
breaks, date_breaks, labels, date_labels, minor_breaks,
|
|
910
|
+
date_minor_breaks, limits, expand, oob, guide, position, sec_axis
|
|
911
|
+
Standard scale parameters.
|
|
912
|
+
|
|
913
|
+
Returns
|
|
914
|
+
-------
|
|
915
|
+
ScaleContinuousPosition
|
|
916
|
+
"""
|
|
917
|
+
if oob is None:
|
|
918
|
+
oob = censor
|
|
919
|
+
return scale_x_continuous(
|
|
920
|
+
name=name,
|
|
921
|
+
breaks=breaks,
|
|
922
|
+
labels=labels,
|
|
923
|
+
minor_breaks=minor_breaks,
|
|
924
|
+
limits=limits,
|
|
925
|
+
expand=expand,
|
|
926
|
+
oob=oob,
|
|
927
|
+
guide=guide,
|
|
928
|
+
position=position,
|
|
929
|
+
sec_axis=sec_axis,
|
|
930
|
+
transform=transform_date(),
|
|
931
|
+
)
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
def scale_y_date(
|
|
935
|
+
name: Any = None,
|
|
936
|
+
*,
|
|
937
|
+
breaks: Any = None,
|
|
938
|
+
labels: Any = None,
|
|
939
|
+
minor_breaks: Any = None,
|
|
940
|
+
limits: Optional[Any] = None,
|
|
941
|
+
expand: Any = None,
|
|
942
|
+
oob: Optional[Callable] = None,
|
|
943
|
+
guide: Any = None,
|
|
944
|
+
position: str = "left",
|
|
945
|
+
sec_axis: Any = None,
|
|
946
|
+
) -> ScaleContinuousPosition:
|
|
947
|
+
"""Date scale for the y position aesthetic.
|
|
948
|
+
|
|
949
|
+
Parameters
|
|
950
|
+
----------
|
|
951
|
+
name, breaks, labels, minor_breaks, limits, expand, oob, guide,
|
|
952
|
+
position, sec_axis
|
|
953
|
+
Standard scale parameters.
|
|
954
|
+
|
|
955
|
+
Returns
|
|
956
|
+
-------
|
|
957
|
+
ScaleContinuousPosition
|
|
958
|
+
"""
|
|
959
|
+
if oob is None:
|
|
960
|
+
oob = censor
|
|
961
|
+
return scale_y_continuous(
|
|
962
|
+
name=name,
|
|
963
|
+
breaks=breaks,
|
|
964
|
+
labels=labels,
|
|
965
|
+
minor_breaks=minor_breaks,
|
|
966
|
+
limits=limits,
|
|
967
|
+
expand=expand,
|
|
968
|
+
oob=oob,
|
|
969
|
+
guide=guide,
|
|
970
|
+
position=position,
|
|
971
|
+
sec_axis=sec_axis,
|
|
972
|
+
transform=transform_date(),
|
|
973
|
+
)
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
def scale_x_datetime(
|
|
977
|
+
name: Any = None,
|
|
978
|
+
*,
|
|
979
|
+
breaks: Any = None,
|
|
980
|
+
date_breaks: Optional[str] = None,
|
|
981
|
+
labels: Any = None,
|
|
982
|
+
date_labels: Optional[str] = None,
|
|
983
|
+
minor_breaks: Any = None,
|
|
984
|
+
limits: Optional[Any] = None,
|
|
985
|
+
expand: Any = None,
|
|
986
|
+
oob: Optional[Callable] = None,
|
|
987
|
+
guide: Any = None,
|
|
988
|
+
position: str = "bottom",
|
|
989
|
+
sec_axis: Any = None,
|
|
990
|
+
) -> ScaleContinuousPosition:
|
|
991
|
+
"""Datetime scale for the x position aesthetic.
|
|
992
|
+
|
|
993
|
+
Parameters
|
|
994
|
+
----------
|
|
995
|
+
name, breaks, date_breaks, labels, date_labels, minor_breaks,
|
|
996
|
+
limits, expand, oob, guide, position, sec_axis
|
|
997
|
+
Standard scale parameters.
|
|
998
|
+
|
|
999
|
+
Returns
|
|
1000
|
+
-------
|
|
1001
|
+
ScaleContinuousPosition
|
|
1002
|
+
"""
|
|
1003
|
+
if oob is None:
|
|
1004
|
+
oob = censor
|
|
1005
|
+
return scale_x_continuous(
|
|
1006
|
+
name=name,
|
|
1007
|
+
breaks=breaks,
|
|
1008
|
+
labels=labels,
|
|
1009
|
+
minor_breaks=minor_breaks,
|
|
1010
|
+
limits=limits,
|
|
1011
|
+
expand=expand,
|
|
1012
|
+
oob=oob,
|
|
1013
|
+
guide=guide,
|
|
1014
|
+
position=position,
|
|
1015
|
+
sec_axis=sec_axis,
|
|
1016
|
+
transform=transform_time(),
|
|
1017
|
+
)
|
|
1018
|
+
|
|
1019
|
+
|
|
1020
|
+
def scale_y_datetime(
|
|
1021
|
+
name: Any = None,
|
|
1022
|
+
*,
|
|
1023
|
+
breaks: Any = None,
|
|
1024
|
+
labels: Any = None,
|
|
1025
|
+
minor_breaks: Any = None,
|
|
1026
|
+
limits: Optional[Any] = None,
|
|
1027
|
+
expand: Any = None,
|
|
1028
|
+
oob: Optional[Callable] = None,
|
|
1029
|
+
guide: Any = None,
|
|
1030
|
+
position: str = "left",
|
|
1031
|
+
sec_axis: Any = None,
|
|
1032
|
+
) -> ScaleContinuousPosition:
|
|
1033
|
+
"""Datetime scale for the y position aesthetic.
|
|
1034
|
+
|
|
1035
|
+
Parameters
|
|
1036
|
+
----------
|
|
1037
|
+
name, breaks, labels, minor_breaks, limits, expand, oob, guide,
|
|
1038
|
+
position, sec_axis
|
|
1039
|
+
Standard scale parameters.
|
|
1040
|
+
|
|
1041
|
+
Returns
|
|
1042
|
+
-------
|
|
1043
|
+
ScaleContinuousPosition
|
|
1044
|
+
"""
|
|
1045
|
+
if oob is None:
|
|
1046
|
+
oob = censor
|
|
1047
|
+
return scale_y_continuous(
|
|
1048
|
+
name=name,
|
|
1049
|
+
breaks=breaks,
|
|
1050
|
+
labels=labels,
|
|
1051
|
+
minor_breaks=minor_breaks,
|
|
1052
|
+
limits=limits,
|
|
1053
|
+
expand=expand,
|
|
1054
|
+
oob=oob,
|
|
1055
|
+
guide=guide,
|
|
1056
|
+
position=position,
|
|
1057
|
+
sec_axis=sec_axis,
|
|
1058
|
+
transform=transform_time(),
|
|
1059
|
+
)
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
# Aliases
|
|
1063
|
+
scale_x_time = scale_x_datetime
|
|
1064
|
+
scale_y_time = scale_y_datetime
|
|
1065
|
+
|
|
1066
|
+
|
|
1067
|
+
# =========================================================================
|
|
1068
|
+
# Colour / fill continuous (gradient) scales
|
|
1069
|
+
# =========================================================================
|
|
1070
|
+
|
|
1071
|
+
def scale_colour_continuous(
|
|
1072
|
+
name: Any = None,
|
|
1073
|
+
*,
|
|
1074
|
+
palette: Optional[Any] = None,
|
|
1075
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1076
|
+
guide: str = "colourbar",
|
|
1077
|
+
na_value: str = "grey50",
|
|
1078
|
+
**kwargs: Any,
|
|
1079
|
+
) -> ScaleContinuous:
|
|
1080
|
+
"""Default continuous colour scale.
|
|
1081
|
+
|
|
1082
|
+
Parameters
|
|
1083
|
+
----------
|
|
1084
|
+
name : str or Waiver, optional
|
|
1085
|
+
Scale title.
|
|
1086
|
+
palette : callable or list of str, optional
|
|
1087
|
+
Palette specification.
|
|
1088
|
+
aesthetics : str or list of str
|
|
1089
|
+
Aesthetic names.
|
|
1090
|
+
guide : str
|
|
1091
|
+
Guide type.
|
|
1092
|
+
na_value : str
|
|
1093
|
+
Colour for missing values.
|
|
1094
|
+
**kwargs
|
|
1095
|
+
Passed to :func:`continuous_scale`.
|
|
1096
|
+
|
|
1097
|
+
Returns
|
|
1098
|
+
-------
|
|
1099
|
+
ScaleContinuous
|
|
1100
|
+
"""
|
|
1101
|
+
pal = palette
|
|
1102
|
+
if pal is not None and not callable(pal):
|
|
1103
|
+
if isinstance(pal, (list, tuple)):
|
|
1104
|
+
pal = pal_gradient_n(pal)
|
|
1105
|
+
return continuous_scale(
|
|
1106
|
+
aesthetics,
|
|
1107
|
+
palette=pal,
|
|
1108
|
+
name=name,
|
|
1109
|
+
guide=guide,
|
|
1110
|
+
na_value=na_value,
|
|
1111
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
1112
|
+
**kwargs,
|
|
1113
|
+
)
|
|
1114
|
+
|
|
1115
|
+
|
|
1116
|
+
def scale_fill_continuous(
|
|
1117
|
+
name: Any = None,
|
|
1118
|
+
*,
|
|
1119
|
+
palette: Optional[Any] = None,
|
|
1120
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1121
|
+
guide: str = "colourbar",
|
|
1122
|
+
na_value: str = "grey50",
|
|
1123
|
+
**kwargs: Any,
|
|
1124
|
+
) -> ScaleContinuous:
|
|
1125
|
+
"""Default continuous fill scale.
|
|
1126
|
+
|
|
1127
|
+
Parameters
|
|
1128
|
+
----------
|
|
1129
|
+
name, palette, aesthetics, guide, na_value
|
|
1130
|
+
See :func:`scale_colour_continuous`.
|
|
1131
|
+
**kwargs
|
|
1132
|
+
Passed to :func:`continuous_scale`.
|
|
1133
|
+
|
|
1134
|
+
Returns
|
|
1135
|
+
-------
|
|
1136
|
+
ScaleContinuous
|
|
1137
|
+
"""
|
|
1138
|
+
pal = palette
|
|
1139
|
+
if pal is not None and not callable(pal):
|
|
1140
|
+
if isinstance(pal, (list, tuple)):
|
|
1141
|
+
pal = pal_gradient_n(pal)
|
|
1142
|
+
return continuous_scale(
|
|
1143
|
+
aesthetics,
|
|
1144
|
+
palette=pal,
|
|
1145
|
+
name=name,
|
|
1146
|
+
guide=guide,
|
|
1147
|
+
na_value=na_value,
|
|
1148
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
1149
|
+
**kwargs,
|
|
1150
|
+
)
|
|
1151
|
+
|
|
1152
|
+
|
|
1153
|
+
def scale_colour_gradient(
|
|
1154
|
+
name: Any = None,
|
|
1155
|
+
*,
|
|
1156
|
+
low: str = "#132B43",
|
|
1157
|
+
high: str = "#56B1F7",
|
|
1158
|
+
space: str = "Lab",
|
|
1159
|
+
na_value: str = "grey50",
|
|
1160
|
+
guide: str = "colourbar",
|
|
1161
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1162
|
+
**kwargs: Any,
|
|
1163
|
+
) -> ScaleContinuous:
|
|
1164
|
+
"""Two-colour gradient colour scale.
|
|
1165
|
+
|
|
1166
|
+
Parameters
|
|
1167
|
+
----------
|
|
1168
|
+
name : str or Waiver, optional
|
|
1169
|
+
Scale title.
|
|
1170
|
+
low : str
|
|
1171
|
+
Colour for the low end.
|
|
1172
|
+
high : str
|
|
1173
|
+
Colour for the high end.
|
|
1174
|
+
space : str
|
|
1175
|
+
Colour interpolation space.
|
|
1176
|
+
na_value : str
|
|
1177
|
+
Colour for missing values.
|
|
1178
|
+
guide : str
|
|
1179
|
+
Guide type.
|
|
1180
|
+
aesthetics : str or list of str
|
|
1181
|
+
Aesthetic names.
|
|
1182
|
+
**kwargs
|
|
1183
|
+
Passed to :func:`continuous_scale`.
|
|
1184
|
+
|
|
1185
|
+
Returns
|
|
1186
|
+
-------
|
|
1187
|
+
ScaleContinuous
|
|
1188
|
+
"""
|
|
1189
|
+
return continuous_scale(
|
|
1190
|
+
aesthetics,
|
|
1191
|
+
palette=pal_seq_gradient(low, high, space),
|
|
1192
|
+
name=name,
|
|
1193
|
+
na_value=na_value,
|
|
1194
|
+
guide=guide,
|
|
1195
|
+
**kwargs,
|
|
1196
|
+
)
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
def scale_fill_gradient(
|
|
1200
|
+
name: Any = None,
|
|
1201
|
+
*,
|
|
1202
|
+
low: str = "#132B43",
|
|
1203
|
+
high: str = "#56B1F7",
|
|
1204
|
+
space: str = "Lab",
|
|
1205
|
+
na_value: str = "grey50",
|
|
1206
|
+
guide: str = "colourbar",
|
|
1207
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1208
|
+
**kwargs: Any,
|
|
1209
|
+
) -> ScaleContinuous:
|
|
1210
|
+
"""Two-colour gradient fill scale.
|
|
1211
|
+
|
|
1212
|
+
Parameters
|
|
1213
|
+
----------
|
|
1214
|
+
name, low, high, space, na_value, guide, aesthetics
|
|
1215
|
+
See :func:`scale_colour_gradient`.
|
|
1216
|
+
**kwargs
|
|
1217
|
+
Passed to :func:`continuous_scale`.
|
|
1218
|
+
|
|
1219
|
+
Returns
|
|
1220
|
+
-------
|
|
1221
|
+
ScaleContinuous
|
|
1222
|
+
"""
|
|
1223
|
+
return continuous_scale(
|
|
1224
|
+
aesthetics,
|
|
1225
|
+
palette=pal_seq_gradient(low, high, space),
|
|
1226
|
+
name=name,
|
|
1227
|
+
na_value=na_value,
|
|
1228
|
+
guide=guide,
|
|
1229
|
+
**kwargs,
|
|
1230
|
+
)
|
|
1231
|
+
|
|
1232
|
+
|
|
1233
|
+
def scale_colour_gradient2(
|
|
1234
|
+
name: Any = None,
|
|
1235
|
+
*,
|
|
1236
|
+
low: Optional[str] = None,
|
|
1237
|
+
mid: str = "white",
|
|
1238
|
+
high: Optional[str] = None,
|
|
1239
|
+
midpoint: float = 0,
|
|
1240
|
+
space: str = "Lab",
|
|
1241
|
+
na_value: str = "grey50",
|
|
1242
|
+
transform: Union[str, Any] = "identity",
|
|
1243
|
+
guide: str = "colourbar",
|
|
1244
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1245
|
+
**kwargs: Any,
|
|
1246
|
+
) -> ScaleContinuous:
|
|
1247
|
+
"""Diverging colour gradient scale.
|
|
1248
|
+
|
|
1249
|
+
Parameters
|
|
1250
|
+
----------
|
|
1251
|
+
name : str or Waiver, optional
|
|
1252
|
+
Scale title.
|
|
1253
|
+
low : str, optional
|
|
1254
|
+
Colour for the low end (default: muted red).
|
|
1255
|
+
mid : str
|
|
1256
|
+
Colour for the midpoint.
|
|
1257
|
+
high : str, optional
|
|
1258
|
+
Colour for the high end (default: muted blue).
|
|
1259
|
+
midpoint : float
|
|
1260
|
+
Data value at the midpoint.
|
|
1261
|
+
space : str
|
|
1262
|
+
Colour interpolation space.
|
|
1263
|
+
na_value : str
|
|
1264
|
+
Colour for missing values.
|
|
1265
|
+
transform : str or Transform
|
|
1266
|
+
Transformation.
|
|
1267
|
+
guide : str
|
|
1268
|
+
Guide type.
|
|
1269
|
+
aesthetics : str or list of str
|
|
1270
|
+
Aesthetic names.
|
|
1271
|
+
**kwargs
|
|
1272
|
+
Passed to :func:`continuous_scale`.
|
|
1273
|
+
|
|
1274
|
+
Returns
|
|
1275
|
+
-------
|
|
1276
|
+
ScaleContinuous
|
|
1277
|
+
"""
|
|
1278
|
+
if low is None:
|
|
1279
|
+
low = muted("red")
|
|
1280
|
+
if high is None:
|
|
1281
|
+
high = muted("blue")
|
|
1282
|
+
return continuous_scale(
|
|
1283
|
+
aesthetics,
|
|
1284
|
+
palette=pal_div_gradient(low, mid, high, space),
|
|
1285
|
+
name=name,
|
|
1286
|
+
na_value=na_value,
|
|
1287
|
+
transform=transform,
|
|
1288
|
+
guide=guide,
|
|
1289
|
+
rescaler=_mid_rescaler(mid=midpoint, transform=transform),
|
|
1290
|
+
**kwargs,
|
|
1291
|
+
)
|
|
1292
|
+
|
|
1293
|
+
|
|
1294
|
+
def scale_fill_gradient2(
|
|
1295
|
+
name: Any = None,
|
|
1296
|
+
*,
|
|
1297
|
+
low: Optional[str] = None,
|
|
1298
|
+
mid: str = "white",
|
|
1299
|
+
high: Optional[str] = None,
|
|
1300
|
+
midpoint: float = 0,
|
|
1301
|
+
space: str = "Lab",
|
|
1302
|
+
na_value: str = "grey50",
|
|
1303
|
+
transform: Union[str, Any] = "identity",
|
|
1304
|
+
guide: str = "colourbar",
|
|
1305
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1306
|
+
**kwargs: Any,
|
|
1307
|
+
) -> ScaleContinuous:
|
|
1308
|
+
"""Diverging fill gradient scale.
|
|
1309
|
+
|
|
1310
|
+
Parameters
|
|
1311
|
+
----------
|
|
1312
|
+
name, low, mid, high, midpoint, space, na_value, transform, guide, aesthetics
|
|
1313
|
+
See :func:`scale_colour_gradient2`.
|
|
1314
|
+
**kwargs
|
|
1315
|
+
Passed to :func:`continuous_scale`.
|
|
1316
|
+
|
|
1317
|
+
Returns
|
|
1318
|
+
-------
|
|
1319
|
+
ScaleContinuous
|
|
1320
|
+
"""
|
|
1321
|
+
if low is None:
|
|
1322
|
+
low = muted("red")
|
|
1323
|
+
if high is None:
|
|
1324
|
+
high = muted("blue")
|
|
1325
|
+
return continuous_scale(
|
|
1326
|
+
aesthetics,
|
|
1327
|
+
palette=pal_div_gradient(low, mid, high, space),
|
|
1328
|
+
name=name,
|
|
1329
|
+
na_value=na_value,
|
|
1330
|
+
transform=transform,
|
|
1331
|
+
guide=guide,
|
|
1332
|
+
rescaler=_mid_rescaler(mid=midpoint, transform=transform),
|
|
1333
|
+
**kwargs,
|
|
1334
|
+
)
|
|
1335
|
+
|
|
1336
|
+
|
|
1337
|
+
def scale_colour_gradientn(
|
|
1338
|
+
name: Any = None,
|
|
1339
|
+
*,
|
|
1340
|
+
colours: Optional[Sequence[str]] = None,
|
|
1341
|
+
colors: Optional[Sequence[str]] = None,
|
|
1342
|
+
values: Optional[Sequence[float]] = None,
|
|
1343
|
+
space: str = "Lab",
|
|
1344
|
+
na_value: str = "grey50",
|
|
1345
|
+
guide: str = "colourbar",
|
|
1346
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1347
|
+
**kwargs: Any,
|
|
1348
|
+
) -> ScaleContinuous:
|
|
1349
|
+
"""N-colour gradient colour scale.
|
|
1350
|
+
|
|
1351
|
+
Parameters
|
|
1352
|
+
----------
|
|
1353
|
+
name : str or Waiver, optional
|
|
1354
|
+
Scale title.
|
|
1355
|
+
colours : list of str, optional
|
|
1356
|
+
Colour values.
|
|
1357
|
+
colors : list of str, optional
|
|
1358
|
+
Alias for *colours*.
|
|
1359
|
+
values : list of float, optional
|
|
1360
|
+
Positions of colours.
|
|
1361
|
+
space : str
|
|
1362
|
+
Colour interpolation space.
|
|
1363
|
+
na_value : str
|
|
1364
|
+
Colour for missing values.
|
|
1365
|
+
guide : str
|
|
1366
|
+
Guide type.
|
|
1367
|
+
aesthetics : str or list of str
|
|
1368
|
+
Aesthetic names.
|
|
1369
|
+
**kwargs
|
|
1370
|
+
Passed to :func:`continuous_scale`.
|
|
1371
|
+
|
|
1372
|
+
Returns
|
|
1373
|
+
-------
|
|
1374
|
+
ScaleContinuous
|
|
1375
|
+
"""
|
|
1376
|
+
cols = colours if colours is not None else colors
|
|
1377
|
+
if cols is None:
|
|
1378
|
+
cli_abort("Must provide either 'colours' or 'colors'.")
|
|
1379
|
+
return continuous_scale(
|
|
1380
|
+
aesthetics,
|
|
1381
|
+
palette=pal_gradient_n(cols, values, space),
|
|
1382
|
+
name=name,
|
|
1383
|
+
na_value=na_value,
|
|
1384
|
+
guide=guide,
|
|
1385
|
+
**kwargs,
|
|
1386
|
+
)
|
|
1387
|
+
|
|
1388
|
+
|
|
1389
|
+
def scale_fill_gradientn(
|
|
1390
|
+
name: Any = None,
|
|
1391
|
+
*,
|
|
1392
|
+
colours: Optional[Sequence[str]] = None,
|
|
1393
|
+
colors: Optional[Sequence[str]] = None,
|
|
1394
|
+
values: Optional[Sequence[float]] = None,
|
|
1395
|
+
space: str = "Lab",
|
|
1396
|
+
na_value: str = "grey50",
|
|
1397
|
+
guide: str = "colourbar",
|
|
1398
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1399
|
+
**kwargs: Any,
|
|
1400
|
+
) -> ScaleContinuous:
|
|
1401
|
+
"""N-colour gradient fill scale.
|
|
1402
|
+
|
|
1403
|
+
Parameters
|
|
1404
|
+
----------
|
|
1405
|
+
name, colours, colors, values, space, na_value, guide, aesthetics
|
|
1406
|
+
See :func:`scale_colour_gradientn`.
|
|
1407
|
+
**kwargs
|
|
1408
|
+
Passed to :func:`continuous_scale`.
|
|
1409
|
+
|
|
1410
|
+
Returns
|
|
1411
|
+
-------
|
|
1412
|
+
ScaleContinuous
|
|
1413
|
+
"""
|
|
1414
|
+
cols = colours if colours is not None else colors
|
|
1415
|
+
if cols is None:
|
|
1416
|
+
cli_abort("Must provide either 'colours' or 'colors'.")
|
|
1417
|
+
return continuous_scale(
|
|
1418
|
+
aesthetics,
|
|
1419
|
+
palette=pal_gradient_n(cols, values, space),
|
|
1420
|
+
name=name,
|
|
1421
|
+
na_value=na_value,
|
|
1422
|
+
guide=guide,
|
|
1423
|
+
**kwargs,
|
|
1424
|
+
)
|
|
1425
|
+
|
|
1426
|
+
|
|
1427
|
+
# =========================================================================
|
|
1428
|
+
# Colour / fill discrete scales
|
|
1429
|
+
# =========================================================================
|
|
1430
|
+
|
|
1431
|
+
def scale_colour_discrete(
|
|
1432
|
+
name: Any = None,
|
|
1433
|
+
*,
|
|
1434
|
+
palette: Optional[Any] = None,
|
|
1435
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1436
|
+
na_value: str = "grey50",
|
|
1437
|
+
**kwargs: Any,
|
|
1438
|
+
) -> ScaleDiscrete:
|
|
1439
|
+
"""Default discrete colour scale.
|
|
1440
|
+
|
|
1441
|
+
Parameters
|
|
1442
|
+
----------
|
|
1443
|
+
name : str or Waiver, optional
|
|
1444
|
+
Scale title.
|
|
1445
|
+
palette : callable, optional
|
|
1446
|
+
Palette function.
|
|
1447
|
+
aesthetics : str or list of str
|
|
1448
|
+
Aesthetic names.
|
|
1449
|
+
na_value : str
|
|
1450
|
+
Colour for missing values.
|
|
1451
|
+
**kwargs
|
|
1452
|
+
Passed to :func:`discrete_scale`.
|
|
1453
|
+
|
|
1454
|
+
Returns
|
|
1455
|
+
-------
|
|
1456
|
+
ScaleDiscrete
|
|
1457
|
+
"""
|
|
1458
|
+
return discrete_scale(
|
|
1459
|
+
aesthetics,
|
|
1460
|
+
palette=palette,
|
|
1461
|
+
name=name,
|
|
1462
|
+
na_value=na_value,
|
|
1463
|
+
fallback_palette=pal_hue(),
|
|
1464
|
+
**kwargs,
|
|
1465
|
+
)
|
|
1466
|
+
|
|
1467
|
+
|
|
1468
|
+
def scale_fill_discrete(
|
|
1469
|
+
name: Any = None,
|
|
1470
|
+
*,
|
|
1471
|
+
palette: Optional[Any] = None,
|
|
1472
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1473
|
+
na_value: str = "grey50",
|
|
1474
|
+
**kwargs: Any,
|
|
1475
|
+
) -> ScaleDiscrete:
|
|
1476
|
+
"""Default discrete fill scale.
|
|
1477
|
+
|
|
1478
|
+
Parameters
|
|
1479
|
+
----------
|
|
1480
|
+
name, palette, aesthetics, na_value
|
|
1481
|
+
See :func:`scale_colour_discrete`.
|
|
1482
|
+
**kwargs
|
|
1483
|
+
Passed to :func:`discrete_scale`.
|
|
1484
|
+
|
|
1485
|
+
Returns
|
|
1486
|
+
-------
|
|
1487
|
+
ScaleDiscrete
|
|
1488
|
+
"""
|
|
1489
|
+
return discrete_scale(
|
|
1490
|
+
aesthetics,
|
|
1491
|
+
palette=palette,
|
|
1492
|
+
name=name,
|
|
1493
|
+
na_value=na_value,
|
|
1494
|
+
fallback_palette=pal_hue(),
|
|
1495
|
+
**kwargs,
|
|
1496
|
+
)
|
|
1497
|
+
|
|
1498
|
+
|
|
1499
|
+
def scale_colour_hue(
|
|
1500
|
+
name: Any = None,
|
|
1501
|
+
*,
|
|
1502
|
+
h: Sequence[float] = (15, 375),
|
|
1503
|
+
c: float = 100,
|
|
1504
|
+
l: float = 65,
|
|
1505
|
+
h_start: float = 0,
|
|
1506
|
+
direction: int = 1,
|
|
1507
|
+
na_value: str = "grey50",
|
|
1508
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1509
|
+
**kwargs: Any,
|
|
1510
|
+
) -> ScaleDiscrete:
|
|
1511
|
+
"""Evenly spaced hue colour scale for discrete data.
|
|
1512
|
+
|
|
1513
|
+
Parameters
|
|
1514
|
+
----------
|
|
1515
|
+
name : str or Waiver, optional
|
|
1516
|
+
Scale title.
|
|
1517
|
+
h : tuple of float
|
|
1518
|
+
Range of hues (0--360).
|
|
1519
|
+
c : float
|
|
1520
|
+
Chroma.
|
|
1521
|
+
l : float
|
|
1522
|
+
Luminance.
|
|
1523
|
+
h_start : float
|
|
1524
|
+
Hue offset.
|
|
1525
|
+
direction : int
|
|
1526
|
+
Direction of hue traverse (1 or -1).
|
|
1527
|
+
na_value : str
|
|
1528
|
+
Colour for missing values.
|
|
1529
|
+
aesthetics : str or list of str
|
|
1530
|
+
Aesthetic names.
|
|
1531
|
+
**kwargs
|
|
1532
|
+
Passed to :func:`discrete_scale`.
|
|
1533
|
+
|
|
1534
|
+
Returns
|
|
1535
|
+
-------
|
|
1536
|
+
ScaleDiscrete
|
|
1537
|
+
"""
|
|
1538
|
+
return discrete_scale(
|
|
1539
|
+
aesthetics,
|
|
1540
|
+
palette=pal_hue(h, c, l, h_start, direction),
|
|
1541
|
+
name=name,
|
|
1542
|
+
na_value=na_value,
|
|
1543
|
+
**kwargs,
|
|
1544
|
+
)
|
|
1545
|
+
|
|
1546
|
+
|
|
1547
|
+
def scale_fill_hue(
|
|
1548
|
+
name: Any = None,
|
|
1549
|
+
*,
|
|
1550
|
+
h: Sequence[float] = (15, 375),
|
|
1551
|
+
c: float = 100,
|
|
1552
|
+
l: float = 65,
|
|
1553
|
+
h_start: float = 0,
|
|
1554
|
+
direction: int = 1,
|
|
1555
|
+
na_value: str = "grey50",
|
|
1556
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1557
|
+
**kwargs: Any,
|
|
1558
|
+
) -> ScaleDiscrete:
|
|
1559
|
+
"""Evenly spaced hue fill scale for discrete data.
|
|
1560
|
+
|
|
1561
|
+
Parameters
|
|
1562
|
+
----------
|
|
1563
|
+
name, h, c, l, h_start, direction, na_value, aesthetics
|
|
1564
|
+
See :func:`scale_colour_hue`.
|
|
1565
|
+
**kwargs
|
|
1566
|
+
Passed to :func:`discrete_scale`.
|
|
1567
|
+
|
|
1568
|
+
Returns
|
|
1569
|
+
-------
|
|
1570
|
+
ScaleDiscrete
|
|
1571
|
+
"""
|
|
1572
|
+
return discrete_scale(
|
|
1573
|
+
aesthetics,
|
|
1574
|
+
palette=pal_hue(h, c, l, h_start, direction),
|
|
1575
|
+
name=name,
|
|
1576
|
+
na_value=na_value,
|
|
1577
|
+
**kwargs,
|
|
1578
|
+
)
|
|
1579
|
+
|
|
1580
|
+
|
|
1581
|
+
# =========================================================================
|
|
1582
|
+
# Brewer scales
|
|
1583
|
+
# =========================================================================
|
|
1584
|
+
|
|
1585
|
+
def scale_colour_brewer(
|
|
1586
|
+
name: Any = None,
|
|
1587
|
+
*,
|
|
1588
|
+
type: str = "seq",
|
|
1589
|
+
palette: Union[int, str] = 1,
|
|
1590
|
+
direction: int = 1,
|
|
1591
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1592
|
+
**kwargs: Any,
|
|
1593
|
+
) -> ScaleDiscrete:
|
|
1594
|
+
"""ColorBrewer discrete colour scale.
|
|
1595
|
+
|
|
1596
|
+
Parameters
|
|
1597
|
+
----------
|
|
1598
|
+
name : str or Waiver, optional
|
|
1599
|
+
Scale title.
|
|
1600
|
+
type : str
|
|
1601
|
+
Palette type (``'seq'``, ``'div'``, ``'qual'``).
|
|
1602
|
+
palette : int or str
|
|
1603
|
+
Palette name or index.
|
|
1604
|
+
direction : int
|
|
1605
|
+
Colour order direction.
|
|
1606
|
+
aesthetics : str or list of str
|
|
1607
|
+
Aesthetic names.
|
|
1608
|
+
**kwargs
|
|
1609
|
+
Passed to :func:`discrete_scale`.
|
|
1610
|
+
|
|
1611
|
+
Returns
|
|
1612
|
+
-------
|
|
1613
|
+
ScaleDiscrete
|
|
1614
|
+
"""
|
|
1615
|
+
return discrete_scale(
|
|
1616
|
+
aesthetics,
|
|
1617
|
+
palette=pal_brewer(type, palette, direction),
|
|
1618
|
+
name=name,
|
|
1619
|
+
**kwargs,
|
|
1620
|
+
)
|
|
1621
|
+
|
|
1622
|
+
|
|
1623
|
+
def scale_fill_brewer(
|
|
1624
|
+
name: Any = None,
|
|
1625
|
+
*,
|
|
1626
|
+
type: str = "seq",
|
|
1627
|
+
palette: Union[int, str] = 1,
|
|
1628
|
+
direction: int = 1,
|
|
1629
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1630
|
+
**kwargs: Any,
|
|
1631
|
+
) -> ScaleDiscrete:
|
|
1632
|
+
"""ColorBrewer discrete fill scale.
|
|
1633
|
+
|
|
1634
|
+
Parameters
|
|
1635
|
+
----------
|
|
1636
|
+
name, type, palette, direction, aesthetics
|
|
1637
|
+
See :func:`scale_colour_brewer`.
|
|
1638
|
+
**kwargs
|
|
1639
|
+
Passed to :func:`discrete_scale`.
|
|
1640
|
+
|
|
1641
|
+
Returns
|
|
1642
|
+
-------
|
|
1643
|
+
ScaleDiscrete
|
|
1644
|
+
"""
|
|
1645
|
+
return discrete_scale(
|
|
1646
|
+
aesthetics,
|
|
1647
|
+
palette=pal_brewer(type, palette, direction),
|
|
1648
|
+
name=name,
|
|
1649
|
+
**kwargs,
|
|
1650
|
+
)
|
|
1651
|
+
|
|
1652
|
+
|
|
1653
|
+
def scale_colour_distiller(
|
|
1654
|
+
name: Any = None,
|
|
1655
|
+
*,
|
|
1656
|
+
type: str = "seq",
|
|
1657
|
+
palette: Union[int, str] = 1,
|
|
1658
|
+
direction: int = -1,
|
|
1659
|
+
values: Optional[Sequence[float]] = None,
|
|
1660
|
+
space: str = "Lab",
|
|
1661
|
+
na_value: str = "grey50",
|
|
1662
|
+
guide: str = "colourbar",
|
|
1663
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1664
|
+
**kwargs: Any,
|
|
1665
|
+
) -> ScaleContinuous:
|
|
1666
|
+
"""Continuous colour scale interpolated from a Brewer palette.
|
|
1667
|
+
|
|
1668
|
+
Parameters
|
|
1669
|
+
----------
|
|
1670
|
+
name : str or Waiver, optional
|
|
1671
|
+
Scale title.
|
|
1672
|
+
type : str
|
|
1673
|
+
Palette type.
|
|
1674
|
+
palette : int or str
|
|
1675
|
+
Palette name or index.
|
|
1676
|
+
direction : int
|
|
1677
|
+
Colour order direction.
|
|
1678
|
+
values : list of float, optional
|
|
1679
|
+
Positions for colours.
|
|
1680
|
+
space : str
|
|
1681
|
+
Interpolation space.
|
|
1682
|
+
na_value : str
|
|
1683
|
+
Colour for missing values.
|
|
1684
|
+
guide : str
|
|
1685
|
+
Guide type.
|
|
1686
|
+
aesthetics : str or list of str
|
|
1687
|
+
Aesthetic names.
|
|
1688
|
+
**kwargs
|
|
1689
|
+
Passed to :func:`continuous_scale`.
|
|
1690
|
+
|
|
1691
|
+
Returns
|
|
1692
|
+
-------
|
|
1693
|
+
ScaleContinuous
|
|
1694
|
+
"""
|
|
1695
|
+
return continuous_scale(
|
|
1696
|
+
aesthetics,
|
|
1697
|
+
palette=pal_gradient_n(pal_brewer(type, palette, direction)(7), values, space),
|
|
1698
|
+
name=name,
|
|
1699
|
+
na_value=na_value,
|
|
1700
|
+
guide=guide,
|
|
1701
|
+
**kwargs,
|
|
1702
|
+
)
|
|
1703
|
+
|
|
1704
|
+
|
|
1705
|
+
def scale_fill_distiller(
|
|
1706
|
+
name: Any = None,
|
|
1707
|
+
*,
|
|
1708
|
+
type: str = "seq",
|
|
1709
|
+
palette: Union[int, str] = 1,
|
|
1710
|
+
direction: int = -1,
|
|
1711
|
+
values: Optional[Sequence[float]] = None,
|
|
1712
|
+
space: str = "Lab",
|
|
1713
|
+
na_value: str = "grey50",
|
|
1714
|
+
guide: str = "colourbar",
|
|
1715
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1716
|
+
**kwargs: Any,
|
|
1717
|
+
) -> ScaleContinuous:
|
|
1718
|
+
"""Continuous fill scale interpolated from a Brewer palette.
|
|
1719
|
+
|
|
1720
|
+
Parameters
|
|
1721
|
+
----------
|
|
1722
|
+
name, type, palette, direction, values, space, na_value, guide, aesthetics
|
|
1723
|
+
See :func:`scale_colour_distiller`.
|
|
1724
|
+
**kwargs
|
|
1725
|
+
Passed to :func:`continuous_scale`.
|
|
1726
|
+
|
|
1727
|
+
Returns
|
|
1728
|
+
-------
|
|
1729
|
+
ScaleContinuous
|
|
1730
|
+
"""
|
|
1731
|
+
return continuous_scale(
|
|
1732
|
+
aesthetics,
|
|
1733
|
+
palette=pal_gradient_n(pal_brewer(type, palette, direction)(7), values, space),
|
|
1734
|
+
name=name,
|
|
1735
|
+
na_value=na_value,
|
|
1736
|
+
guide=guide,
|
|
1737
|
+
**kwargs,
|
|
1738
|
+
)
|
|
1739
|
+
|
|
1740
|
+
|
|
1741
|
+
def scale_colour_fermenter(
|
|
1742
|
+
name: Any = None,
|
|
1743
|
+
*,
|
|
1744
|
+
type: str = "seq",
|
|
1745
|
+
palette: Union[int, str] = 1,
|
|
1746
|
+
direction: int = -1,
|
|
1747
|
+
na_value: str = "grey50",
|
|
1748
|
+
guide: str = "coloursteps",
|
|
1749
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1750
|
+
**kwargs: Any,
|
|
1751
|
+
) -> ScaleBinned:
|
|
1752
|
+
"""Binned colour scale from a Brewer palette.
|
|
1753
|
+
|
|
1754
|
+
Parameters
|
|
1755
|
+
----------
|
|
1756
|
+
name : str or Waiver, optional
|
|
1757
|
+
Scale title.
|
|
1758
|
+
type : str
|
|
1759
|
+
Palette type.
|
|
1760
|
+
palette : int or str
|
|
1761
|
+
Palette name or index.
|
|
1762
|
+
direction : int
|
|
1763
|
+
Colour order direction.
|
|
1764
|
+
na_value : str
|
|
1765
|
+
Colour for missing values.
|
|
1766
|
+
guide : str
|
|
1767
|
+
Guide type.
|
|
1768
|
+
aesthetics : str or list of str
|
|
1769
|
+
Aesthetic names.
|
|
1770
|
+
**kwargs
|
|
1771
|
+
Passed to :func:`binned_scale`.
|
|
1772
|
+
|
|
1773
|
+
Returns
|
|
1774
|
+
-------
|
|
1775
|
+
ScaleBinned
|
|
1776
|
+
"""
|
|
1777
|
+
return binned_scale(
|
|
1778
|
+
aesthetics,
|
|
1779
|
+
palette=pal_brewer(type, palette, direction),
|
|
1780
|
+
name=name,
|
|
1781
|
+
na_value=na_value,
|
|
1782
|
+
guide=guide,
|
|
1783
|
+
**kwargs,
|
|
1784
|
+
)
|
|
1785
|
+
|
|
1786
|
+
|
|
1787
|
+
def scale_fill_fermenter(
|
|
1788
|
+
name: Any = None,
|
|
1789
|
+
*,
|
|
1790
|
+
type: str = "seq",
|
|
1791
|
+
palette: Union[int, str] = 1,
|
|
1792
|
+
direction: int = -1,
|
|
1793
|
+
na_value: str = "grey50",
|
|
1794
|
+
guide: str = "coloursteps",
|
|
1795
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1796
|
+
**kwargs: Any,
|
|
1797
|
+
) -> ScaleBinned:
|
|
1798
|
+
"""Binned fill scale from a Brewer palette.
|
|
1799
|
+
|
|
1800
|
+
Parameters
|
|
1801
|
+
----------
|
|
1802
|
+
name, type, palette, direction, na_value, guide, aesthetics
|
|
1803
|
+
See :func:`scale_colour_fermenter`.
|
|
1804
|
+
**kwargs
|
|
1805
|
+
Passed to :func:`binned_scale`.
|
|
1806
|
+
|
|
1807
|
+
Returns
|
|
1808
|
+
-------
|
|
1809
|
+
ScaleBinned
|
|
1810
|
+
"""
|
|
1811
|
+
return binned_scale(
|
|
1812
|
+
aesthetics,
|
|
1813
|
+
palette=pal_brewer(type, palette, direction),
|
|
1814
|
+
name=name,
|
|
1815
|
+
na_value=na_value,
|
|
1816
|
+
guide=guide,
|
|
1817
|
+
**kwargs,
|
|
1818
|
+
)
|
|
1819
|
+
|
|
1820
|
+
|
|
1821
|
+
# =========================================================================
|
|
1822
|
+
# Grey scales
|
|
1823
|
+
# =========================================================================
|
|
1824
|
+
|
|
1825
|
+
def scale_colour_grey(
|
|
1826
|
+
name: Any = None,
|
|
1827
|
+
*,
|
|
1828
|
+
start: float = 0.2,
|
|
1829
|
+
end: float = 0.8,
|
|
1830
|
+
na_value: str = "red",
|
|
1831
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1832
|
+
**kwargs: Any,
|
|
1833
|
+
) -> ScaleDiscrete:
|
|
1834
|
+
"""Sequential grey discrete colour scale.
|
|
1835
|
+
|
|
1836
|
+
Parameters
|
|
1837
|
+
----------
|
|
1838
|
+
name : str or Waiver, optional
|
|
1839
|
+
Scale title.
|
|
1840
|
+
start : float
|
|
1841
|
+
Grey level for the lightest colour.
|
|
1842
|
+
end : float
|
|
1843
|
+
Grey level for the darkest colour.
|
|
1844
|
+
na_value : str
|
|
1845
|
+
Colour for missing values.
|
|
1846
|
+
aesthetics : str or list of str
|
|
1847
|
+
Aesthetic names.
|
|
1848
|
+
**kwargs
|
|
1849
|
+
Passed to :func:`discrete_scale`.
|
|
1850
|
+
|
|
1851
|
+
Returns
|
|
1852
|
+
-------
|
|
1853
|
+
ScaleDiscrete
|
|
1854
|
+
"""
|
|
1855
|
+
return discrete_scale(
|
|
1856
|
+
aesthetics,
|
|
1857
|
+
palette=pal_grey(start, end),
|
|
1858
|
+
name=name,
|
|
1859
|
+
na_value=na_value,
|
|
1860
|
+
**kwargs,
|
|
1861
|
+
)
|
|
1862
|
+
|
|
1863
|
+
|
|
1864
|
+
def scale_fill_grey(
|
|
1865
|
+
name: Any = None,
|
|
1866
|
+
*,
|
|
1867
|
+
start: float = 0.2,
|
|
1868
|
+
end: float = 0.8,
|
|
1869
|
+
na_value: str = "red",
|
|
1870
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1871
|
+
**kwargs: Any,
|
|
1872
|
+
) -> ScaleDiscrete:
|
|
1873
|
+
"""Sequential grey discrete fill scale.
|
|
1874
|
+
|
|
1875
|
+
Parameters
|
|
1876
|
+
----------
|
|
1877
|
+
name, start, end, na_value, aesthetics
|
|
1878
|
+
See :func:`scale_colour_grey`.
|
|
1879
|
+
**kwargs
|
|
1880
|
+
Passed to :func:`discrete_scale`.
|
|
1881
|
+
|
|
1882
|
+
Returns
|
|
1883
|
+
-------
|
|
1884
|
+
ScaleDiscrete
|
|
1885
|
+
"""
|
|
1886
|
+
return discrete_scale(
|
|
1887
|
+
aesthetics,
|
|
1888
|
+
palette=pal_grey(start, end),
|
|
1889
|
+
name=name,
|
|
1890
|
+
na_value=na_value,
|
|
1891
|
+
**kwargs,
|
|
1892
|
+
)
|
|
1893
|
+
|
|
1894
|
+
|
|
1895
|
+
# =========================================================================
|
|
1896
|
+
# Viridis scales
|
|
1897
|
+
# =========================================================================
|
|
1898
|
+
|
|
1899
|
+
def scale_colour_viridis_d(
|
|
1900
|
+
name: Any = None,
|
|
1901
|
+
*,
|
|
1902
|
+
alpha: float = 1,
|
|
1903
|
+
begin: float = 0,
|
|
1904
|
+
end: float = 1,
|
|
1905
|
+
direction: int = 1,
|
|
1906
|
+
option: str = "D",
|
|
1907
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1908
|
+
**kwargs: Any,
|
|
1909
|
+
) -> ScaleDiscrete:
|
|
1910
|
+
"""Viridis discrete colour scale.
|
|
1911
|
+
|
|
1912
|
+
Parameters
|
|
1913
|
+
----------
|
|
1914
|
+
name : str or Waiver, optional
|
|
1915
|
+
Scale title.
|
|
1916
|
+
alpha : float
|
|
1917
|
+
Alpha transparency.
|
|
1918
|
+
begin, end : float
|
|
1919
|
+
Range within the colour map (0--1).
|
|
1920
|
+
direction : int
|
|
1921
|
+
Colour order direction.
|
|
1922
|
+
option : str
|
|
1923
|
+
Colour map variant.
|
|
1924
|
+
aesthetics : str or list of str
|
|
1925
|
+
Aesthetic names.
|
|
1926
|
+
**kwargs
|
|
1927
|
+
Passed to :func:`discrete_scale`.
|
|
1928
|
+
|
|
1929
|
+
Returns
|
|
1930
|
+
-------
|
|
1931
|
+
ScaleDiscrete
|
|
1932
|
+
"""
|
|
1933
|
+
return discrete_scale(
|
|
1934
|
+
aesthetics,
|
|
1935
|
+
palette=pal_viridis(alpha, begin, end, direction, option),
|
|
1936
|
+
name=name,
|
|
1937
|
+
**kwargs,
|
|
1938
|
+
)
|
|
1939
|
+
|
|
1940
|
+
|
|
1941
|
+
def scale_fill_viridis_d(
|
|
1942
|
+
name: Any = None,
|
|
1943
|
+
*,
|
|
1944
|
+
alpha: float = 1,
|
|
1945
|
+
begin: float = 0,
|
|
1946
|
+
end: float = 1,
|
|
1947
|
+
direction: int = 1,
|
|
1948
|
+
option: str = "D",
|
|
1949
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
1950
|
+
**kwargs: Any,
|
|
1951
|
+
) -> ScaleDiscrete:
|
|
1952
|
+
"""Viridis discrete fill scale.
|
|
1953
|
+
|
|
1954
|
+
Parameters
|
|
1955
|
+
----------
|
|
1956
|
+
name, alpha, begin, end, direction, option, aesthetics
|
|
1957
|
+
See :func:`scale_colour_viridis_d`.
|
|
1958
|
+
**kwargs
|
|
1959
|
+
Passed to :func:`discrete_scale`.
|
|
1960
|
+
|
|
1961
|
+
Returns
|
|
1962
|
+
-------
|
|
1963
|
+
ScaleDiscrete
|
|
1964
|
+
"""
|
|
1965
|
+
return discrete_scale(
|
|
1966
|
+
aesthetics,
|
|
1967
|
+
palette=pal_viridis(alpha, begin, end, direction, option),
|
|
1968
|
+
name=name,
|
|
1969
|
+
**kwargs,
|
|
1970
|
+
)
|
|
1971
|
+
|
|
1972
|
+
|
|
1973
|
+
def scale_colour_viridis_c(
|
|
1974
|
+
name: Any = None,
|
|
1975
|
+
*,
|
|
1976
|
+
alpha: float = 1,
|
|
1977
|
+
begin: float = 0,
|
|
1978
|
+
end: float = 1,
|
|
1979
|
+
direction: int = 1,
|
|
1980
|
+
option: str = "D",
|
|
1981
|
+
values: Optional[Sequence[float]] = None,
|
|
1982
|
+
space: str = "Lab",
|
|
1983
|
+
na_value: str = "grey50",
|
|
1984
|
+
guide: str = "colourbar",
|
|
1985
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
1986
|
+
**kwargs: Any,
|
|
1987
|
+
) -> ScaleContinuous:
|
|
1988
|
+
"""Viridis continuous colour scale.
|
|
1989
|
+
|
|
1990
|
+
Parameters
|
|
1991
|
+
----------
|
|
1992
|
+
name : str or Waiver, optional
|
|
1993
|
+
Scale title.
|
|
1994
|
+
alpha, begin, end, direction, option
|
|
1995
|
+
Viridis palette parameters.
|
|
1996
|
+
values : list of float, optional
|
|
1997
|
+
Positions for colours.
|
|
1998
|
+
space : str
|
|
1999
|
+
Interpolation space.
|
|
2000
|
+
na_value : str
|
|
2001
|
+
Colour for missing values.
|
|
2002
|
+
guide : str
|
|
2003
|
+
Guide type.
|
|
2004
|
+
aesthetics : str or list of str
|
|
2005
|
+
Aesthetic names.
|
|
2006
|
+
**kwargs
|
|
2007
|
+
Passed to :func:`continuous_scale`.
|
|
2008
|
+
|
|
2009
|
+
Returns
|
|
2010
|
+
-------
|
|
2011
|
+
ScaleContinuous
|
|
2012
|
+
"""
|
|
2013
|
+
return continuous_scale(
|
|
2014
|
+
aesthetics,
|
|
2015
|
+
palette=pal_gradient_n(
|
|
2016
|
+
pal_viridis(alpha, begin, end, direction, option)(6),
|
|
2017
|
+
values,
|
|
2018
|
+
space,
|
|
2019
|
+
),
|
|
2020
|
+
name=name,
|
|
2021
|
+
na_value=na_value,
|
|
2022
|
+
guide=guide,
|
|
2023
|
+
**kwargs,
|
|
2024
|
+
)
|
|
2025
|
+
|
|
2026
|
+
|
|
2027
|
+
def scale_fill_viridis_c(
|
|
2028
|
+
name: Any = None,
|
|
2029
|
+
*,
|
|
2030
|
+
alpha: float = 1,
|
|
2031
|
+
begin: float = 0,
|
|
2032
|
+
end: float = 1,
|
|
2033
|
+
direction: int = 1,
|
|
2034
|
+
option: str = "D",
|
|
2035
|
+
values: Optional[Sequence[float]] = None,
|
|
2036
|
+
space: str = "Lab",
|
|
2037
|
+
na_value: str = "grey50",
|
|
2038
|
+
guide: str = "colourbar",
|
|
2039
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2040
|
+
**kwargs: Any,
|
|
2041
|
+
) -> ScaleContinuous:
|
|
2042
|
+
"""Viridis continuous fill scale.
|
|
2043
|
+
|
|
2044
|
+
Parameters
|
|
2045
|
+
----------
|
|
2046
|
+
name, alpha, begin, end, direction, option, values, space, na_value,
|
|
2047
|
+
guide, aesthetics
|
|
2048
|
+
See :func:`scale_colour_viridis_c`.
|
|
2049
|
+
**kwargs
|
|
2050
|
+
Passed to :func:`continuous_scale`.
|
|
2051
|
+
|
|
2052
|
+
Returns
|
|
2053
|
+
-------
|
|
2054
|
+
ScaleContinuous
|
|
2055
|
+
"""
|
|
2056
|
+
return continuous_scale(
|
|
2057
|
+
aesthetics,
|
|
2058
|
+
palette=pal_gradient_n(
|
|
2059
|
+
pal_viridis(alpha, begin, end, direction, option)(6),
|
|
2060
|
+
values,
|
|
2061
|
+
space,
|
|
2062
|
+
),
|
|
2063
|
+
name=name,
|
|
2064
|
+
na_value=na_value,
|
|
2065
|
+
guide=guide,
|
|
2066
|
+
**kwargs,
|
|
2067
|
+
)
|
|
2068
|
+
|
|
2069
|
+
|
|
2070
|
+
def scale_colour_viridis_b(
|
|
2071
|
+
name: Any = None,
|
|
2072
|
+
*,
|
|
2073
|
+
alpha: float = 1,
|
|
2074
|
+
begin: float = 0,
|
|
2075
|
+
end: float = 1,
|
|
2076
|
+
direction: int = 1,
|
|
2077
|
+
option: str = "D",
|
|
2078
|
+
values: Optional[Sequence[float]] = None,
|
|
2079
|
+
space: str = "Lab",
|
|
2080
|
+
na_value: str = "grey50",
|
|
2081
|
+
guide: str = "coloursteps",
|
|
2082
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2083
|
+
**kwargs: Any,
|
|
2084
|
+
) -> ScaleBinned:
|
|
2085
|
+
"""Viridis binned colour scale.
|
|
2086
|
+
|
|
2087
|
+
Parameters
|
|
2088
|
+
----------
|
|
2089
|
+
name, alpha, begin, end, direction, option, values, space, na_value,
|
|
2090
|
+
guide, aesthetics
|
|
2091
|
+
See :func:`scale_colour_viridis_c`.
|
|
2092
|
+
**kwargs
|
|
2093
|
+
Passed to :func:`binned_scale`.
|
|
2094
|
+
|
|
2095
|
+
Returns
|
|
2096
|
+
-------
|
|
2097
|
+
ScaleBinned
|
|
2098
|
+
"""
|
|
2099
|
+
return binned_scale(
|
|
2100
|
+
aesthetics,
|
|
2101
|
+
palette=pal_viridis(alpha, begin, end, direction, option),
|
|
2102
|
+
name=name,
|
|
2103
|
+
na_value=na_value,
|
|
2104
|
+
guide=guide,
|
|
2105
|
+
**kwargs,
|
|
2106
|
+
)
|
|
2107
|
+
|
|
2108
|
+
|
|
2109
|
+
def scale_fill_viridis_b(
|
|
2110
|
+
name: Any = None,
|
|
2111
|
+
*,
|
|
2112
|
+
alpha: float = 1,
|
|
2113
|
+
begin: float = 0,
|
|
2114
|
+
end: float = 1,
|
|
2115
|
+
direction: int = 1,
|
|
2116
|
+
option: str = "D",
|
|
2117
|
+
values: Optional[Sequence[float]] = None,
|
|
2118
|
+
space: str = "Lab",
|
|
2119
|
+
na_value: str = "grey50",
|
|
2120
|
+
guide: str = "coloursteps",
|
|
2121
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2122
|
+
**kwargs: Any,
|
|
2123
|
+
) -> ScaleBinned:
|
|
2124
|
+
"""Viridis binned fill scale.
|
|
2125
|
+
|
|
2126
|
+
Parameters
|
|
2127
|
+
----------
|
|
2128
|
+
name, alpha, begin, end, direction, option, values, space, na_value,
|
|
2129
|
+
guide, aesthetics
|
|
2130
|
+
See :func:`scale_colour_viridis_b`.
|
|
2131
|
+
**kwargs
|
|
2132
|
+
Passed to :func:`binned_scale`.
|
|
2133
|
+
|
|
2134
|
+
Returns
|
|
2135
|
+
-------
|
|
2136
|
+
ScaleBinned
|
|
2137
|
+
"""
|
|
2138
|
+
return binned_scale(
|
|
2139
|
+
aesthetics,
|
|
2140
|
+
palette=pal_viridis(alpha, begin, end, direction, option),
|
|
2141
|
+
name=name,
|
|
2142
|
+
na_value=na_value,
|
|
2143
|
+
guide=guide,
|
|
2144
|
+
**kwargs,
|
|
2145
|
+
)
|
|
2146
|
+
|
|
2147
|
+
|
|
2148
|
+
# =========================================================================
|
|
2149
|
+
# Colour / fill binned (steps) scales
|
|
2150
|
+
# =========================================================================
|
|
2151
|
+
|
|
2152
|
+
def scale_colour_binned(
|
|
2153
|
+
name: Any = None,
|
|
2154
|
+
*,
|
|
2155
|
+
palette: Optional[Any] = None,
|
|
2156
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2157
|
+
guide: str = "coloursteps",
|
|
2158
|
+
na_value: str = "grey50",
|
|
2159
|
+
**kwargs: Any,
|
|
2160
|
+
) -> ScaleBinned:
|
|
2161
|
+
"""Default binned colour scale.
|
|
2162
|
+
|
|
2163
|
+
Parameters
|
|
2164
|
+
----------
|
|
2165
|
+
name : str or Waiver, optional
|
|
2166
|
+
Scale title.
|
|
2167
|
+
palette : callable or list of str, optional
|
|
2168
|
+
Palette specification.
|
|
2169
|
+
aesthetics : str or list of str
|
|
2170
|
+
Aesthetic names.
|
|
2171
|
+
guide : str
|
|
2172
|
+
Guide type.
|
|
2173
|
+
na_value : str
|
|
2174
|
+
Colour for missing values.
|
|
2175
|
+
**kwargs
|
|
2176
|
+
Passed to :func:`binned_scale`.
|
|
2177
|
+
|
|
2178
|
+
Returns
|
|
2179
|
+
-------
|
|
2180
|
+
ScaleBinned
|
|
2181
|
+
"""
|
|
2182
|
+
return binned_scale(
|
|
2183
|
+
aesthetics,
|
|
2184
|
+
palette=palette,
|
|
2185
|
+
name=name,
|
|
2186
|
+
guide=guide,
|
|
2187
|
+
na_value=na_value,
|
|
2188
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
2189
|
+
**kwargs,
|
|
2190
|
+
)
|
|
2191
|
+
|
|
2192
|
+
|
|
2193
|
+
def scale_fill_binned(
|
|
2194
|
+
name: Any = None,
|
|
2195
|
+
*,
|
|
2196
|
+
palette: Optional[Any] = None,
|
|
2197
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2198
|
+
guide: str = "coloursteps",
|
|
2199
|
+
na_value: str = "grey50",
|
|
2200
|
+
**kwargs: Any,
|
|
2201
|
+
) -> ScaleBinned:
|
|
2202
|
+
"""Default binned fill scale.
|
|
2203
|
+
|
|
2204
|
+
Parameters
|
|
2205
|
+
----------
|
|
2206
|
+
name, palette, aesthetics, guide, na_value
|
|
2207
|
+
See :func:`scale_colour_binned`.
|
|
2208
|
+
**kwargs
|
|
2209
|
+
Passed to :func:`binned_scale`.
|
|
2210
|
+
|
|
2211
|
+
Returns
|
|
2212
|
+
-------
|
|
2213
|
+
ScaleBinned
|
|
2214
|
+
"""
|
|
2215
|
+
return binned_scale(
|
|
2216
|
+
aesthetics,
|
|
2217
|
+
palette=palette,
|
|
2218
|
+
name=name,
|
|
2219
|
+
guide=guide,
|
|
2220
|
+
na_value=na_value,
|
|
2221
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
2222
|
+
**kwargs,
|
|
2223
|
+
)
|
|
2224
|
+
|
|
2225
|
+
|
|
2226
|
+
def scale_colour_steps(
|
|
2227
|
+
name: Any = None,
|
|
2228
|
+
*,
|
|
2229
|
+
low: str = "#132B43",
|
|
2230
|
+
high: str = "#56B1F7",
|
|
2231
|
+
space: str = "Lab",
|
|
2232
|
+
na_value: str = "grey50",
|
|
2233
|
+
guide: str = "coloursteps",
|
|
2234
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2235
|
+
**kwargs: Any,
|
|
2236
|
+
) -> ScaleBinned:
|
|
2237
|
+
"""Binned two-colour gradient colour scale.
|
|
2238
|
+
|
|
2239
|
+
Parameters
|
|
2240
|
+
----------
|
|
2241
|
+
name : str or Waiver, optional
|
|
2242
|
+
Scale title.
|
|
2243
|
+
low, high : str
|
|
2244
|
+
Gradient endpoint colours.
|
|
2245
|
+
space : str
|
|
2246
|
+
Interpolation space.
|
|
2247
|
+
na_value : str
|
|
2248
|
+
Colour for missing values.
|
|
2249
|
+
guide : str
|
|
2250
|
+
Guide type.
|
|
2251
|
+
aesthetics : str or list of str
|
|
2252
|
+
Aesthetic names.
|
|
2253
|
+
**kwargs
|
|
2254
|
+
Passed to :func:`binned_scale`.
|
|
2255
|
+
|
|
2256
|
+
Returns
|
|
2257
|
+
-------
|
|
2258
|
+
ScaleBinned
|
|
2259
|
+
"""
|
|
2260
|
+
return binned_scale(
|
|
2261
|
+
aesthetics,
|
|
2262
|
+
palette=pal_seq_gradient(low, high, space),
|
|
2263
|
+
name=name,
|
|
2264
|
+
na_value=na_value,
|
|
2265
|
+
guide=guide,
|
|
2266
|
+
**kwargs,
|
|
2267
|
+
)
|
|
2268
|
+
|
|
2269
|
+
|
|
2270
|
+
def scale_fill_steps(
|
|
2271
|
+
name: Any = None,
|
|
2272
|
+
*,
|
|
2273
|
+
low: str = "#132B43",
|
|
2274
|
+
high: str = "#56B1F7",
|
|
2275
|
+
space: str = "Lab",
|
|
2276
|
+
na_value: str = "grey50",
|
|
2277
|
+
guide: str = "coloursteps",
|
|
2278
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2279
|
+
**kwargs: Any,
|
|
2280
|
+
) -> ScaleBinned:
|
|
2281
|
+
"""Binned two-colour gradient fill scale.
|
|
2282
|
+
|
|
2283
|
+
Parameters
|
|
2284
|
+
----------
|
|
2285
|
+
name, low, high, space, na_value, guide, aesthetics
|
|
2286
|
+
See :func:`scale_colour_steps`.
|
|
2287
|
+
**kwargs
|
|
2288
|
+
Passed to :func:`binned_scale`.
|
|
2289
|
+
|
|
2290
|
+
Returns
|
|
2291
|
+
-------
|
|
2292
|
+
ScaleBinned
|
|
2293
|
+
"""
|
|
2294
|
+
return binned_scale(
|
|
2295
|
+
aesthetics,
|
|
2296
|
+
palette=pal_seq_gradient(low, high, space),
|
|
2297
|
+
name=name,
|
|
2298
|
+
na_value=na_value,
|
|
2299
|
+
guide=guide,
|
|
2300
|
+
**kwargs,
|
|
2301
|
+
)
|
|
2302
|
+
|
|
2303
|
+
|
|
2304
|
+
def scale_colour_steps2(
|
|
2305
|
+
name: Any = None,
|
|
2306
|
+
*,
|
|
2307
|
+
low: Optional[str] = None,
|
|
2308
|
+
mid: str = "white",
|
|
2309
|
+
high: Optional[str] = None,
|
|
2310
|
+
midpoint: float = 0,
|
|
2311
|
+
space: str = "Lab",
|
|
2312
|
+
na_value: str = "grey50",
|
|
2313
|
+
transform: Union[str, Any] = "identity",
|
|
2314
|
+
guide: str = "coloursteps",
|
|
2315
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2316
|
+
**kwargs: Any,
|
|
2317
|
+
) -> ScaleBinned:
|
|
2318
|
+
"""Diverging binned colour gradient scale.
|
|
2319
|
+
|
|
2320
|
+
Parameters
|
|
2321
|
+
----------
|
|
2322
|
+
name, low, mid, high, midpoint, space, na_value, transform, guide, aesthetics
|
|
2323
|
+
See :func:`scale_colour_gradient2` for parameter descriptions.
|
|
2324
|
+
**kwargs
|
|
2325
|
+
Passed to :func:`binned_scale`.
|
|
2326
|
+
|
|
2327
|
+
Returns
|
|
2328
|
+
-------
|
|
2329
|
+
ScaleBinned
|
|
2330
|
+
"""
|
|
2331
|
+
if low is None:
|
|
2332
|
+
low = muted("red")
|
|
2333
|
+
if high is None:
|
|
2334
|
+
high = muted("blue")
|
|
2335
|
+
return binned_scale(
|
|
2336
|
+
aesthetics,
|
|
2337
|
+
palette=pal_div_gradient(low, mid, high, space),
|
|
2338
|
+
name=name,
|
|
2339
|
+
na_value=na_value,
|
|
2340
|
+
transform=transform,
|
|
2341
|
+
guide=guide,
|
|
2342
|
+
rescaler=_mid_rescaler(mid=midpoint, transform=transform),
|
|
2343
|
+
**kwargs,
|
|
2344
|
+
)
|
|
2345
|
+
|
|
2346
|
+
|
|
2347
|
+
def scale_fill_steps2(
|
|
2348
|
+
name: Any = None,
|
|
2349
|
+
*,
|
|
2350
|
+
low: Optional[str] = None,
|
|
2351
|
+
mid: str = "white",
|
|
2352
|
+
high: Optional[str] = None,
|
|
2353
|
+
midpoint: float = 0,
|
|
2354
|
+
space: str = "Lab",
|
|
2355
|
+
na_value: str = "grey50",
|
|
2356
|
+
transform: Union[str, Any] = "identity",
|
|
2357
|
+
guide: str = "coloursteps",
|
|
2358
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2359
|
+
**kwargs: Any,
|
|
2360
|
+
) -> ScaleBinned:
|
|
2361
|
+
"""Diverging binned fill gradient scale.
|
|
2362
|
+
|
|
2363
|
+
Parameters
|
|
2364
|
+
----------
|
|
2365
|
+
name, low, mid, high, midpoint, space, na_value, transform, guide, aesthetics
|
|
2366
|
+
See :func:`scale_colour_steps2`.
|
|
2367
|
+
**kwargs
|
|
2368
|
+
Passed to :func:`binned_scale`.
|
|
2369
|
+
|
|
2370
|
+
Returns
|
|
2371
|
+
-------
|
|
2372
|
+
ScaleBinned
|
|
2373
|
+
"""
|
|
2374
|
+
if low is None:
|
|
2375
|
+
low = muted("red")
|
|
2376
|
+
if high is None:
|
|
2377
|
+
high = muted("blue")
|
|
2378
|
+
return binned_scale(
|
|
2379
|
+
aesthetics,
|
|
2380
|
+
palette=pal_div_gradient(low, mid, high, space),
|
|
2381
|
+
name=name,
|
|
2382
|
+
na_value=na_value,
|
|
2383
|
+
transform=transform,
|
|
2384
|
+
guide=guide,
|
|
2385
|
+
rescaler=_mid_rescaler(mid=midpoint, transform=transform),
|
|
2386
|
+
**kwargs,
|
|
2387
|
+
)
|
|
2388
|
+
|
|
2389
|
+
|
|
2390
|
+
def scale_colour_stepsn(
|
|
2391
|
+
name: Any = None,
|
|
2392
|
+
*,
|
|
2393
|
+
colours: Optional[Sequence[str]] = None,
|
|
2394
|
+
colors: Optional[Sequence[str]] = None,
|
|
2395
|
+
values: Optional[Sequence[float]] = None,
|
|
2396
|
+
space: str = "Lab",
|
|
2397
|
+
na_value: str = "grey50",
|
|
2398
|
+
guide: str = "coloursteps",
|
|
2399
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2400
|
+
**kwargs: Any,
|
|
2401
|
+
) -> ScaleBinned:
|
|
2402
|
+
"""N-colour binned gradient colour scale.
|
|
2403
|
+
|
|
2404
|
+
Parameters
|
|
2405
|
+
----------
|
|
2406
|
+
name, colours, colors, values, space, na_value, guide, aesthetics
|
|
2407
|
+
See :func:`scale_colour_gradientn`.
|
|
2408
|
+
**kwargs
|
|
2409
|
+
Passed to :func:`binned_scale`.
|
|
2410
|
+
|
|
2411
|
+
Returns
|
|
2412
|
+
-------
|
|
2413
|
+
ScaleBinned
|
|
2414
|
+
"""
|
|
2415
|
+
cols = colours if colours is not None else colors
|
|
2416
|
+
if cols is None:
|
|
2417
|
+
cli_abort("Must provide either 'colours' or 'colors'.")
|
|
2418
|
+
return binned_scale(
|
|
2419
|
+
aesthetics,
|
|
2420
|
+
palette=pal_gradient_n(cols, values, space),
|
|
2421
|
+
name=name,
|
|
2422
|
+
na_value=na_value,
|
|
2423
|
+
guide=guide,
|
|
2424
|
+
**kwargs,
|
|
2425
|
+
)
|
|
2426
|
+
|
|
2427
|
+
|
|
2428
|
+
def scale_fill_stepsn(
|
|
2429
|
+
name: Any = None,
|
|
2430
|
+
*,
|
|
2431
|
+
colours: Optional[Sequence[str]] = None,
|
|
2432
|
+
colors: Optional[Sequence[str]] = None,
|
|
2433
|
+
values: Optional[Sequence[float]] = None,
|
|
2434
|
+
space: str = "Lab",
|
|
2435
|
+
na_value: str = "grey50",
|
|
2436
|
+
guide: str = "coloursteps",
|
|
2437
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2438
|
+
**kwargs: Any,
|
|
2439
|
+
) -> ScaleBinned:
|
|
2440
|
+
"""N-colour binned gradient fill scale.
|
|
2441
|
+
|
|
2442
|
+
Parameters
|
|
2443
|
+
----------
|
|
2444
|
+
name, colours, colors, values, space, na_value, guide, aesthetics
|
|
2445
|
+
See :func:`scale_colour_stepsn`.
|
|
2446
|
+
**kwargs
|
|
2447
|
+
Passed to :func:`binned_scale`.
|
|
2448
|
+
|
|
2449
|
+
Returns
|
|
2450
|
+
-------
|
|
2451
|
+
ScaleBinned
|
|
2452
|
+
"""
|
|
2453
|
+
cols = colours if colours is not None else colors
|
|
2454
|
+
if cols is None:
|
|
2455
|
+
cli_abort("Must provide either 'colours' or 'colors'.")
|
|
2456
|
+
return binned_scale(
|
|
2457
|
+
aesthetics,
|
|
2458
|
+
palette=pal_gradient_n(cols, values, space),
|
|
2459
|
+
name=name,
|
|
2460
|
+
na_value=na_value,
|
|
2461
|
+
guide=guide,
|
|
2462
|
+
**kwargs,
|
|
2463
|
+
)
|
|
2464
|
+
|
|
2465
|
+
|
|
2466
|
+
# =========================================================================
|
|
2467
|
+
# Identity scales
|
|
2468
|
+
# =========================================================================
|
|
2469
|
+
|
|
2470
|
+
def scale_colour_identity(
|
|
2471
|
+
name: Any = None,
|
|
2472
|
+
*,
|
|
2473
|
+
guide: str = "none",
|
|
2474
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2475
|
+
**kwargs: Any,
|
|
2476
|
+
) -> ScaleDiscreteIdentity:
|
|
2477
|
+
"""Identity colour scale -- data values used as colours directly.
|
|
2478
|
+
|
|
2479
|
+
Parameters
|
|
2480
|
+
----------
|
|
2481
|
+
name : str or Waiver, optional
|
|
2482
|
+
Scale title.
|
|
2483
|
+
guide : str
|
|
2484
|
+
Guide type.
|
|
2485
|
+
aesthetics : str or list of str
|
|
2486
|
+
Aesthetic names.
|
|
2487
|
+
**kwargs
|
|
2488
|
+
Passed to :func:`discrete_scale`.
|
|
2489
|
+
|
|
2490
|
+
Returns
|
|
2491
|
+
-------
|
|
2492
|
+
ScaleDiscreteIdentity
|
|
2493
|
+
"""
|
|
2494
|
+
return discrete_scale(
|
|
2495
|
+
aesthetics,
|
|
2496
|
+
palette=pal_identity(),
|
|
2497
|
+
name=name,
|
|
2498
|
+
guide=guide,
|
|
2499
|
+
super_class=ScaleDiscreteIdentity,
|
|
2500
|
+
**kwargs,
|
|
2501
|
+
)
|
|
2502
|
+
|
|
2503
|
+
|
|
2504
|
+
def scale_fill_identity(
|
|
2505
|
+
name: Any = None,
|
|
2506
|
+
*,
|
|
2507
|
+
guide: str = "none",
|
|
2508
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2509
|
+
**kwargs: Any,
|
|
2510
|
+
) -> ScaleDiscreteIdentity:
|
|
2511
|
+
"""Identity fill scale.
|
|
2512
|
+
|
|
2513
|
+
Parameters
|
|
2514
|
+
----------
|
|
2515
|
+
name, guide, aesthetics
|
|
2516
|
+
See :func:`scale_colour_identity`.
|
|
2517
|
+
**kwargs
|
|
2518
|
+
Passed to :func:`discrete_scale`.
|
|
2519
|
+
|
|
2520
|
+
Returns
|
|
2521
|
+
-------
|
|
2522
|
+
ScaleDiscreteIdentity
|
|
2523
|
+
"""
|
|
2524
|
+
return discrete_scale(
|
|
2525
|
+
aesthetics,
|
|
2526
|
+
palette=pal_identity(),
|
|
2527
|
+
name=name,
|
|
2528
|
+
guide=guide,
|
|
2529
|
+
super_class=ScaleDiscreteIdentity,
|
|
2530
|
+
**kwargs,
|
|
2531
|
+
)
|
|
2532
|
+
|
|
2533
|
+
|
|
2534
|
+
def scale_continuous_identity(
|
|
2535
|
+
aesthetics: Union[str, List[str]],
|
|
2536
|
+
name: Any = None,
|
|
2537
|
+
*,
|
|
2538
|
+
guide: str = "none",
|
|
2539
|
+
**kwargs: Any,
|
|
2540
|
+
) -> ScaleContinuousIdentity:
|
|
2541
|
+
"""Generic continuous identity scale.
|
|
2542
|
+
|
|
2543
|
+
Parameters
|
|
2544
|
+
----------
|
|
2545
|
+
aesthetics : str or list of str
|
|
2546
|
+
Aesthetic names.
|
|
2547
|
+
name : str or Waiver, optional
|
|
2548
|
+
Scale title.
|
|
2549
|
+
guide : str
|
|
2550
|
+
Guide type.
|
|
2551
|
+
**kwargs
|
|
2552
|
+
Passed to :func:`continuous_scale`.
|
|
2553
|
+
|
|
2554
|
+
Returns
|
|
2555
|
+
-------
|
|
2556
|
+
ScaleContinuousIdentity
|
|
2557
|
+
"""
|
|
2558
|
+
return continuous_scale(
|
|
2559
|
+
aesthetics,
|
|
2560
|
+
palette=pal_identity(),
|
|
2561
|
+
name=name,
|
|
2562
|
+
guide=guide,
|
|
2563
|
+
super_class=ScaleContinuousIdentity,
|
|
2564
|
+
**kwargs,
|
|
2565
|
+
)
|
|
2566
|
+
|
|
2567
|
+
|
|
2568
|
+
def scale_discrete_identity(
|
|
2569
|
+
aesthetics: Union[str, List[str]],
|
|
2570
|
+
name: Any = None,
|
|
2571
|
+
*,
|
|
2572
|
+
guide: str = "none",
|
|
2573
|
+
**kwargs: Any,
|
|
2574
|
+
) -> ScaleDiscreteIdentity:
|
|
2575
|
+
"""Generic discrete identity scale.
|
|
2576
|
+
|
|
2577
|
+
Parameters
|
|
2578
|
+
----------
|
|
2579
|
+
aesthetics : str or list of str
|
|
2580
|
+
Aesthetic names.
|
|
2581
|
+
name : str or Waiver, optional
|
|
2582
|
+
Scale title.
|
|
2583
|
+
guide : str
|
|
2584
|
+
Guide type.
|
|
2585
|
+
**kwargs
|
|
2586
|
+
Passed to :func:`discrete_scale`.
|
|
2587
|
+
|
|
2588
|
+
Returns
|
|
2589
|
+
-------
|
|
2590
|
+
ScaleDiscreteIdentity
|
|
2591
|
+
"""
|
|
2592
|
+
return discrete_scale(
|
|
2593
|
+
aesthetics,
|
|
2594
|
+
palette=pal_identity(),
|
|
2595
|
+
name=name,
|
|
2596
|
+
guide=guide,
|
|
2597
|
+
super_class=ScaleDiscreteIdentity,
|
|
2598
|
+
**kwargs,
|
|
2599
|
+
)
|
|
2600
|
+
|
|
2601
|
+
|
|
2602
|
+
# =========================================================================
|
|
2603
|
+
# Manual scales
|
|
2604
|
+
# =========================================================================
|
|
2605
|
+
|
|
2606
|
+
def scale_colour_manual(
|
|
2607
|
+
*,
|
|
2608
|
+
values: Any,
|
|
2609
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2610
|
+
breaks: Any = None,
|
|
2611
|
+
na_value: str = "grey50",
|
|
2612
|
+
**kwargs: Any,
|
|
2613
|
+
) -> ScaleDiscrete:
|
|
2614
|
+
"""Manual colour scale.
|
|
2615
|
+
|
|
2616
|
+
Parameters
|
|
2617
|
+
----------
|
|
2618
|
+
values : dict or list
|
|
2619
|
+
Mapping from data values to colours.
|
|
2620
|
+
aesthetics : str or list of str
|
|
2621
|
+
Aesthetic names.
|
|
2622
|
+
breaks : any, optional
|
|
2623
|
+
Break specification.
|
|
2624
|
+
na_value : str
|
|
2625
|
+
Colour for missing values.
|
|
2626
|
+
**kwargs
|
|
2627
|
+
Passed to ``_manual_scale``.
|
|
2628
|
+
|
|
2629
|
+
Returns
|
|
2630
|
+
-------
|
|
2631
|
+
ScaleDiscrete
|
|
2632
|
+
"""
|
|
2633
|
+
if breaks is None:
|
|
2634
|
+
breaks = waiver()
|
|
2635
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
2636
|
+
|
|
2637
|
+
|
|
2638
|
+
def scale_fill_manual(
|
|
2639
|
+
*,
|
|
2640
|
+
values: Any,
|
|
2641
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2642
|
+
breaks: Any = None,
|
|
2643
|
+
na_value: str = "grey50",
|
|
2644
|
+
**kwargs: Any,
|
|
2645
|
+
) -> ScaleDiscrete:
|
|
2646
|
+
"""Manual fill scale.
|
|
2647
|
+
|
|
2648
|
+
Parameters
|
|
2649
|
+
----------
|
|
2650
|
+
values, aesthetics, breaks, na_value
|
|
2651
|
+
See :func:`scale_colour_manual`.
|
|
2652
|
+
**kwargs
|
|
2653
|
+
Passed to ``_manual_scale``.
|
|
2654
|
+
|
|
2655
|
+
Returns
|
|
2656
|
+
-------
|
|
2657
|
+
ScaleDiscrete
|
|
2658
|
+
"""
|
|
2659
|
+
if breaks is None:
|
|
2660
|
+
breaks = waiver()
|
|
2661
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
2662
|
+
|
|
2663
|
+
|
|
2664
|
+
def scale_discrete_manual(
|
|
2665
|
+
aesthetics: Union[str, List[str]],
|
|
2666
|
+
*,
|
|
2667
|
+
values: Any,
|
|
2668
|
+
breaks: Any = None,
|
|
2669
|
+
**kwargs: Any,
|
|
2670
|
+
) -> ScaleDiscrete:
|
|
2671
|
+
"""Generic discrete manual scale.
|
|
2672
|
+
|
|
2673
|
+
Parameters
|
|
2674
|
+
----------
|
|
2675
|
+
aesthetics : str or list of str
|
|
2676
|
+
Aesthetic names.
|
|
2677
|
+
values : dict or list
|
|
2678
|
+
Manual values.
|
|
2679
|
+
breaks : any, optional
|
|
2680
|
+
Break specification.
|
|
2681
|
+
**kwargs
|
|
2682
|
+
Passed to ``_manual_scale``.
|
|
2683
|
+
|
|
2684
|
+
Returns
|
|
2685
|
+
-------
|
|
2686
|
+
ScaleDiscrete
|
|
2687
|
+
"""
|
|
2688
|
+
if breaks is None:
|
|
2689
|
+
breaks = waiver()
|
|
2690
|
+
return _manual_scale(aesthetics, values, breaks, **kwargs)
|
|
2691
|
+
|
|
2692
|
+
|
|
2693
|
+
# =========================================================================
|
|
2694
|
+
# Colour/fill date, datetime, ordinal
|
|
2695
|
+
# =========================================================================
|
|
2696
|
+
|
|
2697
|
+
def scale_colour_date(
|
|
2698
|
+
name: Any = None,
|
|
2699
|
+
*,
|
|
2700
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2701
|
+
**kwargs: Any,
|
|
2702
|
+
) -> ScaleContinuous:
|
|
2703
|
+
"""Date colour scale.
|
|
2704
|
+
|
|
2705
|
+
Parameters
|
|
2706
|
+
----------
|
|
2707
|
+
name : str or Waiver, optional
|
|
2708
|
+
Scale title.
|
|
2709
|
+
aesthetics : str or list of str
|
|
2710
|
+
Aesthetic names.
|
|
2711
|
+
**kwargs
|
|
2712
|
+
Passed to :func:`continuous_scale`.
|
|
2713
|
+
|
|
2714
|
+
Returns
|
|
2715
|
+
-------
|
|
2716
|
+
ScaleContinuous
|
|
2717
|
+
"""
|
|
2718
|
+
return continuous_scale(
|
|
2719
|
+
aesthetics,
|
|
2720
|
+
name=name,
|
|
2721
|
+
transform=transform_date(),
|
|
2722
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
2723
|
+
**kwargs,
|
|
2724
|
+
)
|
|
2725
|
+
|
|
2726
|
+
|
|
2727
|
+
def scale_fill_date(
|
|
2728
|
+
name: Any = None,
|
|
2729
|
+
*,
|
|
2730
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2731
|
+
**kwargs: Any,
|
|
2732
|
+
) -> ScaleContinuous:
|
|
2733
|
+
"""Date fill scale.
|
|
2734
|
+
|
|
2735
|
+
Parameters
|
|
2736
|
+
----------
|
|
2737
|
+
name, aesthetics
|
|
2738
|
+
See :func:`scale_colour_date`.
|
|
2739
|
+
**kwargs
|
|
2740
|
+
Passed to :func:`continuous_scale`.
|
|
2741
|
+
|
|
2742
|
+
Returns
|
|
2743
|
+
-------
|
|
2744
|
+
ScaleContinuous
|
|
2745
|
+
"""
|
|
2746
|
+
return continuous_scale(
|
|
2747
|
+
aesthetics,
|
|
2748
|
+
name=name,
|
|
2749
|
+
transform=transform_date(),
|
|
2750
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
2751
|
+
**kwargs,
|
|
2752
|
+
)
|
|
2753
|
+
|
|
2754
|
+
|
|
2755
|
+
def scale_colour_datetime(
|
|
2756
|
+
name: Any = None,
|
|
2757
|
+
*,
|
|
2758
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2759
|
+
**kwargs: Any,
|
|
2760
|
+
) -> ScaleContinuous:
|
|
2761
|
+
"""Datetime colour scale.
|
|
2762
|
+
|
|
2763
|
+
Parameters
|
|
2764
|
+
----------
|
|
2765
|
+
name : str or Waiver, optional
|
|
2766
|
+
Scale title.
|
|
2767
|
+
aesthetics : str or list of str
|
|
2768
|
+
Aesthetic names.
|
|
2769
|
+
**kwargs
|
|
2770
|
+
Passed to :func:`continuous_scale`.
|
|
2771
|
+
|
|
2772
|
+
Returns
|
|
2773
|
+
-------
|
|
2774
|
+
ScaleContinuous
|
|
2775
|
+
"""
|
|
2776
|
+
return continuous_scale(
|
|
2777
|
+
aesthetics,
|
|
2778
|
+
name=name,
|
|
2779
|
+
transform=transform_time(),
|
|
2780
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
2781
|
+
**kwargs,
|
|
2782
|
+
)
|
|
2783
|
+
|
|
2784
|
+
|
|
2785
|
+
def scale_fill_datetime(
|
|
2786
|
+
name: Any = None,
|
|
2787
|
+
*,
|
|
2788
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2789
|
+
**kwargs: Any,
|
|
2790
|
+
) -> ScaleContinuous:
|
|
2791
|
+
"""Datetime fill scale.
|
|
2792
|
+
|
|
2793
|
+
Parameters
|
|
2794
|
+
----------
|
|
2795
|
+
name, aesthetics
|
|
2796
|
+
See :func:`scale_colour_datetime`.
|
|
2797
|
+
**kwargs
|
|
2798
|
+
Passed to :func:`continuous_scale`.
|
|
2799
|
+
|
|
2800
|
+
Returns
|
|
2801
|
+
-------
|
|
2802
|
+
ScaleContinuous
|
|
2803
|
+
"""
|
|
2804
|
+
return continuous_scale(
|
|
2805
|
+
aesthetics,
|
|
2806
|
+
name=name,
|
|
2807
|
+
transform=transform_time(),
|
|
2808
|
+
fallback_palette=pal_seq_gradient("#132B43", "#56B1F7"),
|
|
2809
|
+
**kwargs,
|
|
2810
|
+
)
|
|
2811
|
+
|
|
2812
|
+
|
|
2813
|
+
def scale_colour_ordinal(
|
|
2814
|
+
name: Any = None,
|
|
2815
|
+
*,
|
|
2816
|
+
aesthetics: Union[str, List[str]] = "colour",
|
|
2817
|
+
**kwargs: Any,
|
|
2818
|
+
) -> ScaleDiscrete:
|
|
2819
|
+
"""Ordinal colour scale (viridis palette).
|
|
2820
|
+
|
|
2821
|
+
Parameters
|
|
2822
|
+
----------
|
|
2823
|
+
name : str or Waiver, optional
|
|
2824
|
+
Scale title.
|
|
2825
|
+
aesthetics : str or list of str
|
|
2826
|
+
Aesthetic names.
|
|
2827
|
+
**kwargs
|
|
2828
|
+
Passed to :func:`discrete_scale`.
|
|
2829
|
+
|
|
2830
|
+
Returns
|
|
2831
|
+
-------
|
|
2832
|
+
ScaleDiscrete
|
|
2833
|
+
"""
|
|
2834
|
+
return discrete_scale(
|
|
2835
|
+
aesthetics,
|
|
2836
|
+
palette=pal_viridis(),
|
|
2837
|
+
name=name,
|
|
2838
|
+
**kwargs,
|
|
2839
|
+
)
|
|
2840
|
+
|
|
2841
|
+
|
|
2842
|
+
def scale_fill_ordinal(
|
|
2843
|
+
name: Any = None,
|
|
2844
|
+
*,
|
|
2845
|
+
aesthetics: Union[str, List[str]] = "fill",
|
|
2846
|
+
**kwargs: Any,
|
|
2847
|
+
) -> ScaleDiscrete:
|
|
2848
|
+
"""Ordinal fill scale (viridis palette).
|
|
2849
|
+
|
|
2850
|
+
Parameters
|
|
2851
|
+
----------
|
|
2852
|
+
name, aesthetics
|
|
2853
|
+
See :func:`scale_colour_ordinal`.
|
|
2854
|
+
**kwargs
|
|
2855
|
+
Passed to :func:`discrete_scale`.
|
|
2856
|
+
|
|
2857
|
+
Returns
|
|
2858
|
+
-------
|
|
2859
|
+
ScaleDiscrete
|
|
2860
|
+
"""
|
|
2861
|
+
return discrete_scale(
|
|
2862
|
+
aesthetics,
|
|
2863
|
+
palette=pal_viridis(),
|
|
2864
|
+
name=name,
|
|
2865
|
+
**kwargs,
|
|
2866
|
+
)
|
|
2867
|
+
|
|
2868
|
+
|
|
2869
|
+
# =========================================================================
|
|
2870
|
+
# Alpha scales
|
|
2871
|
+
# =========================================================================
|
|
2872
|
+
|
|
2873
|
+
def scale_alpha(
|
|
2874
|
+
name: Any = None,
|
|
2875
|
+
*,
|
|
2876
|
+
range: Optional[Sequence[float]] = None,
|
|
2877
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
2878
|
+
**kwargs: Any,
|
|
2879
|
+
) -> ScaleContinuous:
|
|
2880
|
+
"""Alpha transparency continuous scale.
|
|
2881
|
+
|
|
2882
|
+
Parameters
|
|
2883
|
+
----------
|
|
2884
|
+
name : str or Waiver, optional
|
|
2885
|
+
Scale title.
|
|
2886
|
+
range : tuple of float, optional
|
|
2887
|
+
Output alpha range (default ``(0.1, 1)``).
|
|
2888
|
+
aesthetics : str or list of str
|
|
2889
|
+
Aesthetic names.
|
|
2890
|
+
**kwargs
|
|
2891
|
+
Passed to :func:`continuous_scale`.
|
|
2892
|
+
|
|
2893
|
+
Returns
|
|
2894
|
+
-------
|
|
2895
|
+
ScaleContinuous
|
|
2896
|
+
"""
|
|
2897
|
+
palette = pal_rescale(range) if range is not None else None
|
|
2898
|
+
return continuous_scale(
|
|
2899
|
+
aesthetics,
|
|
2900
|
+
palette=palette,
|
|
2901
|
+
name=name,
|
|
2902
|
+
fallback_palette=pal_rescale((0.1, 1)),
|
|
2903
|
+
**kwargs,
|
|
2904
|
+
)
|
|
2905
|
+
|
|
2906
|
+
|
|
2907
|
+
scale_alpha_continuous = scale_alpha
|
|
2908
|
+
|
|
2909
|
+
|
|
2910
|
+
def scale_alpha_binned(
|
|
2911
|
+
name: Any = None,
|
|
2912
|
+
*,
|
|
2913
|
+
range: Optional[Sequence[float]] = None,
|
|
2914
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
2915
|
+
**kwargs: Any,
|
|
2916
|
+
) -> ScaleBinned:
|
|
2917
|
+
"""Alpha transparency binned scale.
|
|
2918
|
+
|
|
2919
|
+
Parameters
|
|
2920
|
+
----------
|
|
2921
|
+
name : str or Waiver, optional
|
|
2922
|
+
Scale title.
|
|
2923
|
+
range : tuple of float, optional
|
|
2924
|
+
Output alpha range.
|
|
2925
|
+
aesthetics : str or list of str
|
|
2926
|
+
Aesthetic names.
|
|
2927
|
+
**kwargs
|
|
2928
|
+
Passed to :func:`binned_scale`.
|
|
2929
|
+
|
|
2930
|
+
Returns
|
|
2931
|
+
-------
|
|
2932
|
+
ScaleBinned
|
|
2933
|
+
"""
|
|
2934
|
+
palette = pal_rescale(range) if range is not None else None
|
|
2935
|
+
return binned_scale(
|
|
2936
|
+
aesthetics,
|
|
2937
|
+
palette=palette,
|
|
2938
|
+
name=name,
|
|
2939
|
+
fallback_palette=pal_rescale((0.1, 1)),
|
|
2940
|
+
**kwargs,
|
|
2941
|
+
)
|
|
2942
|
+
|
|
2943
|
+
|
|
2944
|
+
def scale_alpha_discrete(
|
|
2945
|
+
name: Any = None,
|
|
2946
|
+
*,
|
|
2947
|
+
range: Optional[Sequence[float]] = None,
|
|
2948
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
2949
|
+
**kwargs: Any,
|
|
2950
|
+
) -> ScaleDiscrete:
|
|
2951
|
+
"""Alpha transparency discrete scale.
|
|
2952
|
+
|
|
2953
|
+
Parameters
|
|
2954
|
+
----------
|
|
2955
|
+
name : str or Waiver, optional
|
|
2956
|
+
Scale title.
|
|
2957
|
+
range : tuple of float, optional
|
|
2958
|
+
Output alpha range.
|
|
2959
|
+
aesthetics : str or list of str
|
|
2960
|
+
Aesthetic names.
|
|
2961
|
+
**kwargs
|
|
2962
|
+
Passed to :func:`scale_alpha_ordinal`.
|
|
2963
|
+
|
|
2964
|
+
Returns
|
|
2965
|
+
-------
|
|
2966
|
+
ScaleDiscrete
|
|
2967
|
+
"""
|
|
2968
|
+
cli_warn("Using alpha for a discrete variable is not advised.")
|
|
2969
|
+
return scale_alpha_ordinal(name=name, range=range, aesthetics=aesthetics, **kwargs)
|
|
2970
|
+
|
|
2971
|
+
|
|
2972
|
+
def scale_alpha_ordinal(
|
|
2973
|
+
name: Any = None,
|
|
2974
|
+
*,
|
|
2975
|
+
range: Optional[Sequence[float]] = None,
|
|
2976
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
2977
|
+
**kwargs: Any,
|
|
2978
|
+
) -> ScaleDiscrete:
|
|
2979
|
+
"""Alpha transparency ordinal scale.
|
|
2980
|
+
|
|
2981
|
+
Parameters
|
|
2982
|
+
----------
|
|
2983
|
+
name : str or Waiver, optional
|
|
2984
|
+
Scale title.
|
|
2985
|
+
range : tuple of float, optional
|
|
2986
|
+
Output alpha range.
|
|
2987
|
+
aesthetics : str or list of str
|
|
2988
|
+
Aesthetic names.
|
|
2989
|
+
**kwargs
|
|
2990
|
+
Passed to :func:`discrete_scale`.
|
|
2991
|
+
|
|
2992
|
+
Returns
|
|
2993
|
+
-------
|
|
2994
|
+
ScaleDiscrete
|
|
2995
|
+
"""
|
|
2996
|
+
if range is not None:
|
|
2997
|
+
_r = range
|
|
2998
|
+
|
|
2999
|
+
def palette(n: int) -> List[float]:
|
|
3000
|
+
return list(np.linspace(_r[0], _r[1], n))
|
|
3001
|
+
else:
|
|
3002
|
+
palette = None
|
|
3003
|
+
return discrete_scale(
|
|
3004
|
+
aesthetics,
|
|
3005
|
+
palette=palette,
|
|
3006
|
+
name=name,
|
|
3007
|
+
fallback_palette=lambda n: list(np.linspace(0.1, 1, n)),
|
|
3008
|
+
**kwargs,
|
|
3009
|
+
)
|
|
3010
|
+
|
|
3011
|
+
|
|
3012
|
+
def scale_alpha_identity(
|
|
3013
|
+
name: Any = None,
|
|
3014
|
+
*,
|
|
3015
|
+
guide: str = "none",
|
|
3016
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
3017
|
+
**kwargs: Any,
|
|
3018
|
+
) -> ScaleContinuousIdentity:
|
|
3019
|
+
"""Alpha identity scale.
|
|
3020
|
+
|
|
3021
|
+
Parameters
|
|
3022
|
+
----------
|
|
3023
|
+
name : str or Waiver, optional
|
|
3024
|
+
Scale title.
|
|
3025
|
+
guide : str
|
|
3026
|
+
Guide type.
|
|
3027
|
+
aesthetics : str or list of str
|
|
3028
|
+
Aesthetic names.
|
|
3029
|
+
**kwargs
|
|
3030
|
+
Passed to :func:`continuous_scale`.
|
|
3031
|
+
|
|
3032
|
+
Returns
|
|
3033
|
+
-------
|
|
3034
|
+
ScaleContinuousIdentity
|
|
3035
|
+
"""
|
|
3036
|
+
return continuous_scale(
|
|
3037
|
+
aesthetics,
|
|
3038
|
+
palette=pal_identity(),
|
|
3039
|
+
name=name,
|
|
3040
|
+
guide=guide,
|
|
3041
|
+
super_class=ScaleContinuousIdentity,
|
|
3042
|
+
**kwargs,
|
|
3043
|
+
)
|
|
3044
|
+
|
|
3045
|
+
|
|
3046
|
+
def scale_alpha_manual(
|
|
3047
|
+
*,
|
|
3048
|
+
values: Any,
|
|
3049
|
+
breaks: Any = None,
|
|
3050
|
+
na_value: Any = np.nan,
|
|
3051
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
3052
|
+
**kwargs: Any,
|
|
3053
|
+
) -> ScaleDiscrete:
|
|
3054
|
+
"""Alpha manual scale.
|
|
3055
|
+
|
|
3056
|
+
Parameters
|
|
3057
|
+
----------
|
|
3058
|
+
values : dict or list
|
|
3059
|
+
Manual alpha values.
|
|
3060
|
+
breaks : any, optional
|
|
3061
|
+
Break specification.
|
|
3062
|
+
na_value : any
|
|
3063
|
+
Value for missing data.
|
|
3064
|
+
aesthetics : str or list of str
|
|
3065
|
+
Aesthetic names.
|
|
3066
|
+
**kwargs
|
|
3067
|
+
Passed to ``_manual_scale``.
|
|
3068
|
+
|
|
3069
|
+
Returns
|
|
3070
|
+
-------
|
|
3071
|
+
ScaleDiscrete
|
|
3072
|
+
"""
|
|
3073
|
+
if breaks is None:
|
|
3074
|
+
breaks = waiver()
|
|
3075
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
3076
|
+
|
|
3077
|
+
|
|
3078
|
+
def scale_alpha_date(
|
|
3079
|
+
name: Any = None,
|
|
3080
|
+
*,
|
|
3081
|
+
range: Optional[Sequence[float]] = None,
|
|
3082
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
3083
|
+
**kwargs: Any,
|
|
3084
|
+
) -> ScaleContinuous:
|
|
3085
|
+
"""Alpha date scale.
|
|
3086
|
+
|
|
3087
|
+
Parameters
|
|
3088
|
+
----------
|
|
3089
|
+
name, range, aesthetics
|
|
3090
|
+
See :func:`scale_alpha`.
|
|
3091
|
+
**kwargs
|
|
3092
|
+
Passed to :func:`continuous_scale`.
|
|
3093
|
+
|
|
3094
|
+
Returns
|
|
3095
|
+
-------
|
|
3096
|
+
ScaleContinuous
|
|
3097
|
+
"""
|
|
3098
|
+
palette = pal_rescale(range) if range is not None else None
|
|
3099
|
+
return continuous_scale(
|
|
3100
|
+
aesthetics,
|
|
3101
|
+
palette=palette,
|
|
3102
|
+
name=name,
|
|
3103
|
+
transform=transform_date(),
|
|
3104
|
+
fallback_palette=pal_rescale((0.1, 1)),
|
|
3105
|
+
**kwargs,
|
|
3106
|
+
)
|
|
3107
|
+
|
|
3108
|
+
|
|
3109
|
+
def scale_alpha_datetime(
|
|
3110
|
+
name: Any = None,
|
|
3111
|
+
*,
|
|
3112
|
+
range: Optional[Sequence[float]] = None,
|
|
3113
|
+
aesthetics: Union[str, List[str]] = "alpha",
|
|
3114
|
+
**kwargs: Any,
|
|
3115
|
+
) -> ScaleContinuous:
|
|
3116
|
+
"""Alpha datetime scale.
|
|
3117
|
+
|
|
3118
|
+
Parameters
|
|
3119
|
+
----------
|
|
3120
|
+
name, range, aesthetics
|
|
3121
|
+
See :func:`scale_alpha`.
|
|
3122
|
+
**kwargs
|
|
3123
|
+
Passed to :func:`continuous_scale`.
|
|
3124
|
+
|
|
3125
|
+
Returns
|
|
3126
|
+
-------
|
|
3127
|
+
ScaleContinuous
|
|
3128
|
+
"""
|
|
3129
|
+
palette = pal_rescale(range) if range is not None else None
|
|
3130
|
+
return continuous_scale(
|
|
3131
|
+
aesthetics,
|
|
3132
|
+
palette=palette,
|
|
3133
|
+
name=name,
|
|
3134
|
+
transform=transform_time(),
|
|
3135
|
+
fallback_palette=pal_rescale((0.1, 1)),
|
|
3136
|
+
**kwargs,
|
|
3137
|
+
)
|
|
3138
|
+
|
|
3139
|
+
|
|
3140
|
+
# =========================================================================
|
|
3141
|
+
# Size scales
|
|
3142
|
+
# =========================================================================
|
|
3143
|
+
|
|
3144
|
+
def scale_size_continuous(
|
|
3145
|
+
name: Any = None,
|
|
3146
|
+
*,
|
|
3147
|
+
breaks: Any = None,
|
|
3148
|
+
labels: Any = None,
|
|
3149
|
+
limits: Optional[Any] = None,
|
|
3150
|
+
range: Optional[Sequence[float]] = None,
|
|
3151
|
+
transform: Union[str, Any] = "identity",
|
|
3152
|
+
trans: Optional[Any] = None,
|
|
3153
|
+
guide: str = "legend",
|
|
3154
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3155
|
+
) -> ScaleContinuous:
|
|
3156
|
+
"""Continuous size scale (area-based).
|
|
3157
|
+
|
|
3158
|
+
Parameters
|
|
3159
|
+
----------
|
|
3160
|
+
name : str or Waiver, optional
|
|
3161
|
+
Scale title.
|
|
3162
|
+
breaks, labels, limits
|
|
3163
|
+
Standard break/label/limit parameters.
|
|
3164
|
+
range : tuple of float, optional
|
|
3165
|
+
Size range.
|
|
3166
|
+
transform : str or Transform
|
|
3167
|
+
Transformation.
|
|
3168
|
+
trans : str or Transform, optional
|
|
3169
|
+
Deprecated alias.
|
|
3170
|
+
guide : str
|
|
3171
|
+
Guide type.
|
|
3172
|
+
aesthetics : str or list of str
|
|
3173
|
+
Aesthetic names.
|
|
3174
|
+
|
|
3175
|
+
Returns
|
|
3176
|
+
-------
|
|
3177
|
+
ScaleContinuous
|
|
3178
|
+
"""
|
|
3179
|
+
palette = pal_area(range) if range is not None else None
|
|
3180
|
+
return continuous_scale(
|
|
3181
|
+
aesthetics,
|
|
3182
|
+
palette=palette,
|
|
3183
|
+
name=name,
|
|
3184
|
+
breaks=breaks,
|
|
3185
|
+
labels=labels,
|
|
3186
|
+
limits=limits,
|
|
3187
|
+
transform=transform,
|
|
3188
|
+
trans=trans,
|
|
3189
|
+
guide=guide,
|
|
3190
|
+
fallback_palette=pal_area(),
|
|
3191
|
+
)
|
|
3192
|
+
|
|
3193
|
+
|
|
3194
|
+
scale_size = scale_size_continuous
|
|
3195
|
+
|
|
3196
|
+
|
|
3197
|
+
def scale_radius(
|
|
3198
|
+
name: Any = None,
|
|
3199
|
+
*,
|
|
3200
|
+
breaks: Any = None,
|
|
3201
|
+
labels: Any = None,
|
|
3202
|
+
limits: Optional[Any] = None,
|
|
3203
|
+
range: Sequence[float] = (1, 6),
|
|
3204
|
+
transform: Union[str, Any] = "identity",
|
|
3205
|
+
trans: Optional[Any] = None,
|
|
3206
|
+
guide: str = "legend",
|
|
3207
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3208
|
+
) -> ScaleContinuous:
|
|
3209
|
+
"""Radius-based size scale.
|
|
3210
|
+
|
|
3211
|
+
Parameters
|
|
3212
|
+
----------
|
|
3213
|
+
name : str or Waiver, optional
|
|
3214
|
+
Scale title.
|
|
3215
|
+
breaks, labels, limits
|
|
3216
|
+
Standard parameters.
|
|
3217
|
+
range : tuple of float
|
|
3218
|
+
Radius range.
|
|
3219
|
+
transform, trans, guide, aesthetics
|
|
3220
|
+
Standard parameters.
|
|
3221
|
+
|
|
3222
|
+
Returns
|
|
3223
|
+
-------
|
|
3224
|
+
ScaleContinuous
|
|
3225
|
+
"""
|
|
3226
|
+
return continuous_scale(
|
|
3227
|
+
aesthetics,
|
|
3228
|
+
palette=pal_rescale(range),
|
|
3229
|
+
name=name,
|
|
3230
|
+
breaks=breaks,
|
|
3231
|
+
labels=labels,
|
|
3232
|
+
limits=limits,
|
|
3233
|
+
transform=transform,
|
|
3234
|
+
trans=trans,
|
|
3235
|
+
guide=guide,
|
|
3236
|
+
)
|
|
3237
|
+
|
|
3238
|
+
|
|
3239
|
+
def scale_size_binned(
|
|
3240
|
+
name: Any = None,
|
|
3241
|
+
*,
|
|
3242
|
+
breaks: Any = None,
|
|
3243
|
+
labels: Any = None,
|
|
3244
|
+
limits: Optional[Any] = None,
|
|
3245
|
+
range: Optional[Sequence[float]] = None,
|
|
3246
|
+
n_breaks: Optional[int] = None,
|
|
3247
|
+
nice_breaks: bool = True,
|
|
3248
|
+
transform: Union[str, Any] = "identity",
|
|
3249
|
+
trans: Optional[Any] = None,
|
|
3250
|
+
guide: str = "bins",
|
|
3251
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3252
|
+
) -> ScaleBinned:
|
|
3253
|
+
"""Binned size scale.
|
|
3254
|
+
|
|
3255
|
+
Parameters
|
|
3256
|
+
----------
|
|
3257
|
+
name, breaks, labels, limits, range, n_breaks, nice_breaks,
|
|
3258
|
+
transform, trans, guide, aesthetics
|
|
3259
|
+
Standard scale parameters.
|
|
3260
|
+
|
|
3261
|
+
Returns
|
|
3262
|
+
-------
|
|
3263
|
+
ScaleBinned
|
|
3264
|
+
"""
|
|
3265
|
+
palette = pal_area(range) if range is not None else None
|
|
3266
|
+
return binned_scale(
|
|
3267
|
+
aesthetics,
|
|
3268
|
+
palette=palette,
|
|
3269
|
+
name=name,
|
|
3270
|
+
breaks=breaks,
|
|
3271
|
+
labels=labels,
|
|
3272
|
+
limits=limits,
|
|
3273
|
+
transform=transform,
|
|
3274
|
+
trans=trans,
|
|
3275
|
+
n_breaks=n_breaks,
|
|
3276
|
+
nice_breaks=nice_breaks,
|
|
3277
|
+
guide=guide,
|
|
3278
|
+
fallback_palette=pal_area(),
|
|
3279
|
+
)
|
|
3280
|
+
|
|
3281
|
+
|
|
3282
|
+
def scale_size_discrete(
|
|
3283
|
+
name: Any = None,
|
|
3284
|
+
**kwargs: Any,
|
|
3285
|
+
) -> ScaleDiscrete:
|
|
3286
|
+
"""Discrete size scale (not recommended).
|
|
3287
|
+
|
|
3288
|
+
Parameters
|
|
3289
|
+
----------
|
|
3290
|
+
name : str or Waiver, optional
|
|
3291
|
+
Scale title.
|
|
3292
|
+
**kwargs
|
|
3293
|
+
Passed to :func:`scale_size_ordinal`.
|
|
3294
|
+
|
|
3295
|
+
Returns
|
|
3296
|
+
-------
|
|
3297
|
+
ScaleDiscrete
|
|
3298
|
+
"""
|
|
3299
|
+
cli_warn("Using size for a discrete variable is not advised.")
|
|
3300
|
+
return scale_size_ordinal(name=name, **kwargs)
|
|
3301
|
+
|
|
3302
|
+
|
|
3303
|
+
def scale_size_ordinal(
|
|
3304
|
+
name: Any = None,
|
|
3305
|
+
*,
|
|
3306
|
+
range: Optional[Sequence[float]] = None,
|
|
3307
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3308
|
+
**kwargs: Any,
|
|
3309
|
+
) -> ScaleDiscrete:
|
|
3310
|
+
"""Ordinal size scale.
|
|
3311
|
+
|
|
3312
|
+
Parameters
|
|
3313
|
+
----------
|
|
3314
|
+
name : str or Waiver, optional
|
|
3315
|
+
Scale title.
|
|
3316
|
+
range : tuple of float, optional
|
|
3317
|
+
Size range.
|
|
3318
|
+
aesthetics : str or list of str
|
|
3319
|
+
Aesthetic names.
|
|
3320
|
+
**kwargs
|
|
3321
|
+
Passed to :func:`discrete_scale`.
|
|
3322
|
+
|
|
3323
|
+
Returns
|
|
3324
|
+
-------
|
|
3325
|
+
ScaleDiscrete
|
|
3326
|
+
"""
|
|
3327
|
+
if range is not None:
|
|
3328
|
+
_r = range
|
|
3329
|
+
|
|
3330
|
+
def palette(n: int) -> List[float]:
|
|
3331
|
+
return list(np.sqrt(np.linspace(_r[0] ** 2, _r[1] ** 2, n)))
|
|
3332
|
+
else:
|
|
3333
|
+
palette = None
|
|
3334
|
+
return discrete_scale(
|
|
3335
|
+
aesthetics,
|
|
3336
|
+
palette=palette,
|
|
3337
|
+
name=name,
|
|
3338
|
+
fallback_palette=lambda n: list(np.sqrt(np.linspace(4, 36, n))),
|
|
3339
|
+
**kwargs,
|
|
3340
|
+
)
|
|
3341
|
+
|
|
3342
|
+
|
|
3343
|
+
def scale_size_area(
|
|
3344
|
+
name: Any = None,
|
|
3345
|
+
*,
|
|
3346
|
+
max_size: float = 6,
|
|
3347
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3348
|
+
**kwargs: Any,
|
|
3349
|
+
) -> ScaleContinuous:
|
|
3350
|
+
"""Size scale where 0 maps to size 0.
|
|
3351
|
+
|
|
3352
|
+
Parameters
|
|
3353
|
+
----------
|
|
3354
|
+
name : str or Waiver, optional
|
|
3355
|
+
Scale title.
|
|
3356
|
+
max_size : float
|
|
3357
|
+
Maximum point size.
|
|
3358
|
+
aesthetics : str or list of str
|
|
3359
|
+
Aesthetic names.
|
|
3360
|
+
**kwargs
|
|
3361
|
+
Passed to :func:`continuous_scale`.
|
|
3362
|
+
|
|
3363
|
+
Returns
|
|
3364
|
+
-------
|
|
3365
|
+
ScaleContinuous
|
|
3366
|
+
"""
|
|
3367
|
+
return continuous_scale(
|
|
3368
|
+
aesthetics,
|
|
3369
|
+
palette=abs_area(max_size),
|
|
3370
|
+
name=name,
|
|
3371
|
+
rescaler=rescale_max,
|
|
3372
|
+
**kwargs,
|
|
3373
|
+
)
|
|
3374
|
+
|
|
3375
|
+
|
|
3376
|
+
def scale_size_binned_area(
|
|
3377
|
+
name: Any = None,
|
|
3378
|
+
*,
|
|
3379
|
+
max_size: float = 6,
|
|
3380
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3381
|
+
**kwargs: Any,
|
|
3382
|
+
) -> ScaleBinned:
|
|
3383
|
+
"""Binned size scale where 0 maps to size 0.
|
|
3384
|
+
|
|
3385
|
+
Parameters
|
|
3386
|
+
----------
|
|
3387
|
+
name : str or Waiver, optional
|
|
3388
|
+
Scale title.
|
|
3389
|
+
max_size : float
|
|
3390
|
+
Maximum point size.
|
|
3391
|
+
aesthetics : str or list of str
|
|
3392
|
+
Aesthetic names.
|
|
3393
|
+
**kwargs
|
|
3394
|
+
Passed to :func:`binned_scale`.
|
|
3395
|
+
|
|
3396
|
+
Returns
|
|
3397
|
+
-------
|
|
3398
|
+
ScaleBinned
|
|
3399
|
+
"""
|
|
3400
|
+
return binned_scale(
|
|
3401
|
+
aesthetics,
|
|
3402
|
+
palette=abs_area(max_size),
|
|
3403
|
+
name=name,
|
|
3404
|
+
rescaler=rescale_max,
|
|
3405
|
+
**kwargs,
|
|
3406
|
+
)
|
|
3407
|
+
|
|
3408
|
+
|
|
3409
|
+
def scale_size_identity(
|
|
3410
|
+
name: Any = None,
|
|
3411
|
+
*,
|
|
3412
|
+
guide: str = "none",
|
|
3413
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3414
|
+
**kwargs: Any,
|
|
3415
|
+
) -> ScaleContinuousIdentity:
|
|
3416
|
+
"""Size identity scale.
|
|
3417
|
+
|
|
3418
|
+
Parameters
|
|
3419
|
+
----------
|
|
3420
|
+
name, guide, aesthetics
|
|
3421
|
+
Standard parameters.
|
|
3422
|
+
**kwargs
|
|
3423
|
+
Passed to :func:`continuous_scale`.
|
|
3424
|
+
|
|
3425
|
+
Returns
|
|
3426
|
+
-------
|
|
3427
|
+
ScaleContinuousIdentity
|
|
3428
|
+
"""
|
|
3429
|
+
return continuous_scale(
|
|
3430
|
+
aesthetics,
|
|
3431
|
+
palette=pal_identity(),
|
|
3432
|
+
name=name,
|
|
3433
|
+
guide=guide,
|
|
3434
|
+
super_class=ScaleContinuousIdentity,
|
|
3435
|
+
**kwargs,
|
|
3436
|
+
)
|
|
3437
|
+
|
|
3438
|
+
|
|
3439
|
+
def scale_size_manual(
|
|
3440
|
+
*,
|
|
3441
|
+
values: Any,
|
|
3442
|
+
breaks: Any = None,
|
|
3443
|
+
na_value: Any = np.nan,
|
|
3444
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3445
|
+
**kwargs: Any,
|
|
3446
|
+
) -> ScaleDiscrete:
|
|
3447
|
+
"""Size manual scale.
|
|
3448
|
+
|
|
3449
|
+
Parameters
|
|
3450
|
+
----------
|
|
3451
|
+
values, breaks, na_value, aesthetics
|
|
3452
|
+
Standard parameters.
|
|
3453
|
+
**kwargs
|
|
3454
|
+
Passed to ``_manual_scale``.
|
|
3455
|
+
|
|
3456
|
+
Returns
|
|
3457
|
+
-------
|
|
3458
|
+
ScaleDiscrete
|
|
3459
|
+
"""
|
|
3460
|
+
if breaks is None:
|
|
3461
|
+
breaks = waiver()
|
|
3462
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
3463
|
+
|
|
3464
|
+
|
|
3465
|
+
def scale_size_date(
|
|
3466
|
+
name: Any = None,
|
|
3467
|
+
*,
|
|
3468
|
+
range: Optional[Sequence[float]] = None,
|
|
3469
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3470
|
+
**kwargs: Any,
|
|
3471
|
+
) -> ScaleContinuous:
|
|
3472
|
+
"""Size date scale.
|
|
3473
|
+
|
|
3474
|
+
Parameters
|
|
3475
|
+
----------
|
|
3476
|
+
name, range, aesthetics
|
|
3477
|
+
Standard parameters.
|
|
3478
|
+
**kwargs
|
|
3479
|
+
Passed to :func:`continuous_scale`.
|
|
3480
|
+
|
|
3481
|
+
Returns
|
|
3482
|
+
-------
|
|
3483
|
+
ScaleContinuous
|
|
3484
|
+
"""
|
|
3485
|
+
palette = pal_area(range) if range is not None else None
|
|
3486
|
+
return continuous_scale(
|
|
3487
|
+
aesthetics,
|
|
3488
|
+
palette=palette,
|
|
3489
|
+
name=name,
|
|
3490
|
+
transform=transform_date(),
|
|
3491
|
+
fallback_palette=pal_area(),
|
|
3492
|
+
**kwargs,
|
|
3493
|
+
)
|
|
3494
|
+
|
|
3495
|
+
|
|
3496
|
+
def scale_size_datetime(
|
|
3497
|
+
name: Any = None,
|
|
3498
|
+
*,
|
|
3499
|
+
range: Optional[Sequence[float]] = None,
|
|
3500
|
+
aesthetics: Union[str, List[str]] = "size",
|
|
3501
|
+
**kwargs: Any,
|
|
3502
|
+
) -> ScaleContinuous:
|
|
3503
|
+
"""Size datetime scale.
|
|
3504
|
+
|
|
3505
|
+
Parameters
|
|
3506
|
+
----------
|
|
3507
|
+
name, range, aesthetics
|
|
3508
|
+
Standard parameters.
|
|
3509
|
+
**kwargs
|
|
3510
|
+
Passed to :func:`continuous_scale`.
|
|
3511
|
+
|
|
3512
|
+
Returns
|
|
3513
|
+
-------
|
|
3514
|
+
ScaleContinuous
|
|
3515
|
+
"""
|
|
3516
|
+
palette = pal_area(range) if range is not None else None
|
|
3517
|
+
return continuous_scale(
|
|
3518
|
+
aesthetics,
|
|
3519
|
+
palette=palette,
|
|
3520
|
+
name=name,
|
|
3521
|
+
transform=transform_time(),
|
|
3522
|
+
fallback_palette=pal_area(),
|
|
3523
|
+
**kwargs,
|
|
3524
|
+
)
|
|
3525
|
+
|
|
3526
|
+
|
|
3527
|
+
# =========================================================================
|
|
3528
|
+
# Shape scales
|
|
3529
|
+
# =========================================================================
|
|
3530
|
+
|
|
3531
|
+
def scale_shape(
|
|
3532
|
+
name: Any = None,
|
|
3533
|
+
*,
|
|
3534
|
+
solid: Optional[bool] = None,
|
|
3535
|
+
aesthetics: Union[str, List[str]] = "shape",
|
|
3536
|
+
**kwargs: Any,
|
|
3537
|
+
) -> ScaleDiscrete:
|
|
3538
|
+
"""Discrete shape scale.
|
|
3539
|
+
|
|
3540
|
+
Parameters
|
|
3541
|
+
----------
|
|
3542
|
+
name : str or Waiver, optional
|
|
3543
|
+
Scale title.
|
|
3544
|
+
solid : bool, optional
|
|
3545
|
+
Whether shapes are solid (default) or hollow.
|
|
3546
|
+
aesthetics : str or list of str
|
|
3547
|
+
Aesthetic names.
|
|
3548
|
+
**kwargs
|
|
3549
|
+
Passed to :func:`discrete_scale`.
|
|
3550
|
+
|
|
3551
|
+
Returns
|
|
3552
|
+
-------
|
|
3553
|
+
ScaleDiscrete
|
|
3554
|
+
"""
|
|
3555
|
+
palette = pal_shape(solid) if solid is not None else None
|
|
3556
|
+
return discrete_scale(
|
|
3557
|
+
aesthetics,
|
|
3558
|
+
palette=palette,
|
|
3559
|
+
name=name,
|
|
3560
|
+
fallback_palette=pal_shape(),
|
|
3561
|
+
**kwargs,
|
|
3562
|
+
)
|
|
3563
|
+
|
|
3564
|
+
|
|
3565
|
+
scale_shape_discrete = scale_shape
|
|
3566
|
+
|
|
3567
|
+
|
|
3568
|
+
def scale_shape_binned(
|
|
3569
|
+
name: Any = None,
|
|
3570
|
+
*,
|
|
3571
|
+
solid: bool = True,
|
|
3572
|
+
aesthetics: Union[str, List[str]] = "shape",
|
|
3573
|
+
**kwargs: Any,
|
|
3574
|
+
) -> ScaleBinned:
|
|
3575
|
+
"""Binned shape scale.
|
|
3576
|
+
|
|
3577
|
+
Parameters
|
|
3578
|
+
----------
|
|
3579
|
+
name : str or Waiver, optional
|
|
3580
|
+
Scale title.
|
|
3581
|
+
solid : bool
|
|
3582
|
+
Whether shapes are solid.
|
|
3583
|
+
aesthetics : str or list of str
|
|
3584
|
+
Aesthetic names.
|
|
3585
|
+
**kwargs
|
|
3586
|
+
Passed to :func:`binned_scale`.
|
|
3587
|
+
|
|
3588
|
+
Returns
|
|
3589
|
+
-------
|
|
3590
|
+
ScaleBinned
|
|
3591
|
+
"""
|
|
3592
|
+
return binned_scale(
|
|
3593
|
+
aesthetics,
|
|
3594
|
+
palette=pal_shape(solid),
|
|
3595
|
+
name=name,
|
|
3596
|
+
**kwargs,
|
|
3597
|
+
)
|
|
3598
|
+
|
|
3599
|
+
|
|
3600
|
+
def scale_shape_continuous(**kwargs: Any) -> None:
|
|
3601
|
+
"""Raise an error -- continuous data cannot be mapped to shape.
|
|
3602
|
+
|
|
3603
|
+
Raises
|
|
3604
|
+
------
|
|
3605
|
+
ValueError
|
|
3606
|
+
"""
|
|
3607
|
+
cli_abort(
|
|
3608
|
+
"A continuous variable cannot be mapped to the shape aesthetic. "
|
|
3609
|
+
"Choose a different aesthetic or use scale_shape_binned()."
|
|
3610
|
+
)
|
|
3611
|
+
|
|
3612
|
+
|
|
3613
|
+
def scale_shape_identity(
|
|
3614
|
+
name: Any = None,
|
|
3615
|
+
*,
|
|
3616
|
+
guide: str = "none",
|
|
3617
|
+
aesthetics: Union[str, List[str]] = "shape",
|
|
3618
|
+
**kwargs: Any,
|
|
3619
|
+
) -> ScaleContinuousIdentity:
|
|
3620
|
+
"""Shape identity scale.
|
|
3621
|
+
|
|
3622
|
+
Parameters
|
|
3623
|
+
----------
|
|
3624
|
+
name, guide, aesthetics
|
|
3625
|
+
Standard parameters.
|
|
3626
|
+
**kwargs
|
|
3627
|
+
Passed to :func:`continuous_scale`.
|
|
3628
|
+
|
|
3629
|
+
Returns
|
|
3630
|
+
-------
|
|
3631
|
+
ScaleContinuousIdentity
|
|
3632
|
+
"""
|
|
3633
|
+
return continuous_scale(
|
|
3634
|
+
aesthetics,
|
|
3635
|
+
palette=pal_identity(),
|
|
3636
|
+
name=name,
|
|
3637
|
+
guide=guide,
|
|
3638
|
+
super_class=ScaleContinuousIdentity,
|
|
3639
|
+
**kwargs,
|
|
3640
|
+
)
|
|
3641
|
+
|
|
3642
|
+
|
|
3643
|
+
def scale_shape_manual(
|
|
3644
|
+
*,
|
|
3645
|
+
values: Any,
|
|
3646
|
+
breaks: Any = None,
|
|
3647
|
+
na_value: Any = np.nan,
|
|
3648
|
+
aesthetics: Union[str, List[str]] = "shape",
|
|
3649
|
+
**kwargs: Any,
|
|
3650
|
+
) -> ScaleDiscrete:
|
|
3651
|
+
"""Shape manual scale.
|
|
3652
|
+
|
|
3653
|
+
Parameters
|
|
3654
|
+
----------
|
|
3655
|
+
values, breaks, na_value, aesthetics
|
|
3656
|
+
Standard parameters.
|
|
3657
|
+
**kwargs
|
|
3658
|
+
Passed to ``_manual_scale``.
|
|
3659
|
+
|
|
3660
|
+
Returns
|
|
3661
|
+
-------
|
|
3662
|
+
ScaleDiscrete
|
|
3663
|
+
"""
|
|
3664
|
+
if breaks is None:
|
|
3665
|
+
breaks = waiver()
|
|
3666
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
3667
|
+
|
|
3668
|
+
|
|
3669
|
+
def scale_shape_ordinal(
|
|
3670
|
+
name: Any = None,
|
|
3671
|
+
**kwargs: Any,
|
|
3672
|
+
) -> ScaleDiscrete:
|
|
3673
|
+
"""Ordinal shape scale (not recommended).
|
|
3674
|
+
|
|
3675
|
+
Parameters
|
|
3676
|
+
----------
|
|
3677
|
+
name : str or Waiver, optional
|
|
3678
|
+
Scale title.
|
|
3679
|
+
**kwargs
|
|
3680
|
+
Passed to :func:`scale_shape`.
|
|
3681
|
+
|
|
3682
|
+
Returns
|
|
3683
|
+
-------
|
|
3684
|
+
ScaleDiscrete
|
|
3685
|
+
"""
|
|
3686
|
+
cli_warn("Using shapes for an ordinal variable is not advised.")
|
|
3687
|
+
return scale_shape(name=name, **kwargs)
|
|
3688
|
+
|
|
3689
|
+
|
|
3690
|
+
# =========================================================================
|
|
3691
|
+
# Linetype scales
|
|
3692
|
+
# =========================================================================
|
|
3693
|
+
|
|
3694
|
+
def scale_linetype(
|
|
3695
|
+
name: Any = None,
|
|
3696
|
+
*,
|
|
3697
|
+
aesthetics: Union[str, List[str]] = "linetype",
|
|
3698
|
+
**kwargs: Any,
|
|
3699
|
+
) -> ScaleDiscrete:
|
|
3700
|
+
"""Discrete linetype scale.
|
|
3701
|
+
|
|
3702
|
+
Parameters
|
|
3703
|
+
----------
|
|
3704
|
+
name : str or Waiver, optional
|
|
3705
|
+
Scale title.
|
|
3706
|
+
aesthetics : str or list of str
|
|
3707
|
+
Aesthetic names.
|
|
3708
|
+
**kwargs
|
|
3709
|
+
Passed to :func:`discrete_scale`.
|
|
3710
|
+
|
|
3711
|
+
Returns
|
|
3712
|
+
-------
|
|
3713
|
+
ScaleDiscrete
|
|
3714
|
+
"""
|
|
3715
|
+
return discrete_scale(
|
|
3716
|
+
aesthetics,
|
|
3717
|
+
palette=None,
|
|
3718
|
+
name=name,
|
|
3719
|
+
fallback_palette=pal_linetype(),
|
|
3720
|
+
**kwargs,
|
|
3721
|
+
)
|
|
3722
|
+
|
|
3723
|
+
|
|
3724
|
+
scale_linetype_discrete = scale_linetype
|
|
3725
|
+
scale_linetype_ordinal = scale_linetype
|
|
3726
|
+
|
|
3727
|
+
|
|
3728
|
+
def scale_linetype_binned(
|
|
3729
|
+
name: Any = None,
|
|
3730
|
+
*,
|
|
3731
|
+
aesthetics: Union[str, List[str]] = "linetype",
|
|
3732
|
+
**kwargs: Any,
|
|
3733
|
+
) -> ScaleBinned:
|
|
3734
|
+
"""Binned linetype scale.
|
|
3735
|
+
|
|
3736
|
+
Parameters
|
|
3737
|
+
----------
|
|
3738
|
+
name : str or Waiver, optional
|
|
3739
|
+
Scale title.
|
|
3740
|
+
aesthetics : str or list of str
|
|
3741
|
+
Aesthetic names.
|
|
3742
|
+
**kwargs
|
|
3743
|
+
Passed to :func:`binned_scale`.
|
|
3744
|
+
|
|
3745
|
+
Returns
|
|
3746
|
+
-------
|
|
3747
|
+
ScaleBinned
|
|
3748
|
+
"""
|
|
3749
|
+
return binned_scale(
|
|
3750
|
+
aesthetics,
|
|
3751
|
+
palette=None,
|
|
3752
|
+
name=name,
|
|
3753
|
+
fallback_palette=pal_linetype(),
|
|
3754
|
+
**kwargs,
|
|
3755
|
+
)
|
|
3756
|
+
|
|
3757
|
+
|
|
3758
|
+
def scale_linetype_continuous(**kwargs: Any) -> None:
|
|
3759
|
+
"""Raise an error -- continuous data cannot be mapped to linetype.
|
|
3760
|
+
|
|
3761
|
+
Raises
|
|
3762
|
+
------
|
|
3763
|
+
ValueError
|
|
3764
|
+
"""
|
|
3765
|
+
cli_abort(
|
|
3766
|
+
"A continuous variable cannot be mapped to the linetype aesthetic. "
|
|
3767
|
+
"Choose a different aesthetic or use scale_linetype_binned()."
|
|
3768
|
+
)
|
|
3769
|
+
|
|
3770
|
+
|
|
3771
|
+
def scale_linetype_identity(
|
|
3772
|
+
name: Any = None,
|
|
3773
|
+
*,
|
|
3774
|
+
guide: str = "none",
|
|
3775
|
+
aesthetics: Union[str, List[str]] = "linetype",
|
|
3776
|
+
**kwargs: Any,
|
|
3777
|
+
) -> ScaleDiscreteIdentity:
|
|
3778
|
+
"""Linetype identity scale.
|
|
3779
|
+
|
|
3780
|
+
Parameters
|
|
3781
|
+
----------
|
|
3782
|
+
name, guide, aesthetics
|
|
3783
|
+
Standard parameters.
|
|
3784
|
+
**kwargs
|
|
3785
|
+
Passed to :func:`discrete_scale`.
|
|
3786
|
+
|
|
3787
|
+
Returns
|
|
3788
|
+
-------
|
|
3789
|
+
ScaleDiscreteIdentity
|
|
3790
|
+
"""
|
|
3791
|
+
return discrete_scale(
|
|
3792
|
+
aesthetics,
|
|
3793
|
+
palette=pal_identity(),
|
|
3794
|
+
name=name,
|
|
3795
|
+
guide=guide,
|
|
3796
|
+
super_class=ScaleDiscreteIdentity,
|
|
3797
|
+
**kwargs,
|
|
3798
|
+
)
|
|
3799
|
+
|
|
3800
|
+
|
|
3801
|
+
def scale_linetype_manual(
|
|
3802
|
+
*,
|
|
3803
|
+
values: Any,
|
|
3804
|
+
breaks: Any = None,
|
|
3805
|
+
na_value: Any = np.nan,
|
|
3806
|
+
aesthetics: Union[str, List[str]] = "linetype",
|
|
3807
|
+
**kwargs: Any,
|
|
3808
|
+
) -> ScaleDiscrete:
|
|
3809
|
+
"""Linetype manual scale.
|
|
3810
|
+
|
|
3811
|
+
Parameters
|
|
3812
|
+
----------
|
|
3813
|
+
values, breaks, na_value, aesthetics
|
|
3814
|
+
Standard parameters.
|
|
3815
|
+
**kwargs
|
|
3816
|
+
Passed to ``_manual_scale``.
|
|
3817
|
+
|
|
3818
|
+
Returns
|
|
3819
|
+
-------
|
|
3820
|
+
ScaleDiscrete
|
|
3821
|
+
"""
|
|
3822
|
+
if breaks is None:
|
|
3823
|
+
breaks = waiver()
|
|
3824
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
3825
|
+
|
|
3826
|
+
|
|
3827
|
+
# =========================================================================
|
|
3828
|
+
# Linewidth scales
|
|
3829
|
+
# =========================================================================
|
|
3830
|
+
|
|
3831
|
+
def scale_linewidth_continuous(
|
|
3832
|
+
name: Any = None,
|
|
3833
|
+
*,
|
|
3834
|
+
breaks: Any = None,
|
|
3835
|
+
labels: Any = None,
|
|
3836
|
+
limits: Optional[Any] = None,
|
|
3837
|
+
range: Optional[Sequence[float]] = None,
|
|
3838
|
+
transform: Union[str, Any] = "identity",
|
|
3839
|
+
trans: Optional[Any] = None,
|
|
3840
|
+
guide: str = "legend",
|
|
3841
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
3842
|
+
) -> ScaleContinuous:
|
|
3843
|
+
"""Continuous linewidth scale.
|
|
3844
|
+
|
|
3845
|
+
Parameters
|
|
3846
|
+
----------
|
|
3847
|
+
name, breaks, labels, limits, range, transform, trans, guide, aesthetics
|
|
3848
|
+
Standard parameters.
|
|
3849
|
+
|
|
3850
|
+
Returns
|
|
3851
|
+
-------
|
|
3852
|
+
ScaleContinuous
|
|
3853
|
+
"""
|
|
3854
|
+
palette = pal_rescale(range) if range is not None else None
|
|
3855
|
+
return continuous_scale(
|
|
3856
|
+
aesthetics,
|
|
3857
|
+
palette=palette,
|
|
3858
|
+
name=name,
|
|
3859
|
+
breaks=breaks,
|
|
3860
|
+
labels=labels,
|
|
3861
|
+
limits=limits,
|
|
3862
|
+
transform=transform,
|
|
3863
|
+
trans=trans,
|
|
3864
|
+
guide=guide,
|
|
3865
|
+
fallback_palette=pal_rescale((1, 6)),
|
|
3866
|
+
)
|
|
3867
|
+
|
|
3868
|
+
|
|
3869
|
+
scale_linewidth = scale_linewidth_continuous
|
|
3870
|
+
|
|
3871
|
+
|
|
3872
|
+
def scale_linewidth_binned(
|
|
3873
|
+
name: Any = None,
|
|
3874
|
+
*,
|
|
3875
|
+
breaks: Any = None,
|
|
3876
|
+
labels: Any = None,
|
|
3877
|
+
limits: Optional[Any] = None,
|
|
3878
|
+
range: Optional[Sequence[float]] = None,
|
|
3879
|
+
n_breaks: Optional[int] = None,
|
|
3880
|
+
nice_breaks: bool = True,
|
|
3881
|
+
transform: Union[str, Any] = "identity",
|
|
3882
|
+
trans: Optional[Any] = None,
|
|
3883
|
+
guide: str = "bins",
|
|
3884
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
3885
|
+
) -> ScaleBinned:
|
|
3886
|
+
"""Binned linewidth scale.
|
|
3887
|
+
|
|
3888
|
+
Parameters
|
|
3889
|
+
----------
|
|
3890
|
+
name, breaks, labels, limits, range, n_breaks, nice_breaks,
|
|
3891
|
+
transform, trans, guide, aesthetics
|
|
3892
|
+
Standard parameters.
|
|
3893
|
+
|
|
3894
|
+
Returns
|
|
3895
|
+
-------
|
|
3896
|
+
ScaleBinned
|
|
3897
|
+
"""
|
|
3898
|
+
palette = pal_rescale(range) if range is not None else None
|
|
3899
|
+
return binned_scale(
|
|
3900
|
+
aesthetics,
|
|
3901
|
+
palette=palette,
|
|
3902
|
+
name=name,
|
|
3903
|
+
breaks=breaks,
|
|
3904
|
+
labels=labels,
|
|
3905
|
+
limits=limits,
|
|
3906
|
+
transform=transform,
|
|
3907
|
+
trans=trans,
|
|
3908
|
+
n_breaks=n_breaks,
|
|
3909
|
+
nice_breaks=nice_breaks,
|
|
3910
|
+
guide=guide,
|
|
3911
|
+
fallback_palette=pal_rescale((1, 6)),
|
|
3912
|
+
)
|
|
3913
|
+
|
|
3914
|
+
|
|
3915
|
+
def scale_linewidth_discrete(
|
|
3916
|
+
name: Any = None,
|
|
3917
|
+
**kwargs: Any,
|
|
3918
|
+
) -> ScaleDiscrete:
|
|
3919
|
+
"""Discrete linewidth scale (not recommended).
|
|
3920
|
+
|
|
3921
|
+
Parameters
|
|
3922
|
+
----------
|
|
3923
|
+
name : str or Waiver, optional
|
|
3924
|
+
Scale title.
|
|
3925
|
+
**kwargs
|
|
3926
|
+
Passed to :func:`scale_linewidth_ordinal`.
|
|
3927
|
+
|
|
3928
|
+
Returns
|
|
3929
|
+
-------
|
|
3930
|
+
ScaleDiscrete
|
|
3931
|
+
"""
|
|
3932
|
+
cli_warn("Using linewidth for a discrete variable is not advised.")
|
|
3933
|
+
return scale_linewidth_ordinal(name=name, **kwargs)
|
|
3934
|
+
|
|
3935
|
+
|
|
3936
|
+
def scale_linewidth_ordinal(
|
|
3937
|
+
name: Any = None,
|
|
3938
|
+
*,
|
|
3939
|
+
range: Optional[Sequence[float]] = None,
|
|
3940
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
3941
|
+
**kwargs: Any,
|
|
3942
|
+
) -> ScaleDiscrete:
|
|
3943
|
+
"""Ordinal linewidth scale.
|
|
3944
|
+
|
|
3945
|
+
Parameters
|
|
3946
|
+
----------
|
|
3947
|
+
name : str or Waiver, optional
|
|
3948
|
+
Scale title.
|
|
3949
|
+
range : tuple of float, optional
|
|
3950
|
+
Linewidth range.
|
|
3951
|
+
aesthetics : str or list of str
|
|
3952
|
+
Aesthetic names.
|
|
3953
|
+
**kwargs
|
|
3954
|
+
Passed to :func:`discrete_scale`.
|
|
3955
|
+
|
|
3956
|
+
Returns
|
|
3957
|
+
-------
|
|
3958
|
+
ScaleDiscrete
|
|
3959
|
+
"""
|
|
3960
|
+
if range is not None:
|
|
3961
|
+
_r = range
|
|
3962
|
+
|
|
3963
|
+
def palette(n: int) -> List[float]:
|
|
3964
|
+
return list(np.linspace(_r[0], _r[1], n))
|
|
3965
|
+
else:
|
|
3966
|
+
palette = None
|
|
3967
|
+
return discrete_scale(
|
|
3968
|
+
aesthetics,
|
|
3969
|
+
palette=palette,
|
|
3970
|
+
name=name,
|
|
3971
|
+
fallback_palette=lambda n: list(np.linspace(2, 6, n)),
|
|
3972
|
+
**kwargs,
|
|
3973
|
+
)
|
|
3974
|
+
|
|
3975
|
+
|
|
3976
|
+
def scale_linewidth_identity(
|
|
3977
|
+
name: Any = None,
|
|
3978
|
+
*,
|
|
3979
|
+
guide: str = "none",
|
|
3980
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
3981
|
+
**kwargs: Any,
|
|
3982
|
+
) -> ScaleContinuousIdentity:
|
|
3983
|
+
"""Linewidth identity scale.
|
|
3984
|
+
|
|
3985
|
+
Parameters
|
|
3986
|
+
----------
|
|
3987
|
+
name, guide, aesthetics
|
|
3988
|
+
Standard parameters.
|
|
3989
|
+
**kwargs
|
|
3990
|
+
Passed to :func:`continuous_scale`.
|
|
3991
|
+
|
|
3992
|
+
Returns
|
|
3993
|
+
-------
|
|
3994
|
+
ScaleContinuousIdentity
|
|
3995
|
+
"""
|
|
3996
|
+
return continuous_scale(
|
|
3997
|
+
aesthetics,
|
|
3998
|
+
palette=pal_identity(),
|
|
3999
|
+
name=name,
|
|
4000
|
+
guide=guide,
|
|
4001
|
+
super_class=ScaleContinuousIdentity,
|
|
4002
|
+
**kwargs,
|
|
4003
|
+
)
|
|
4004
|
+
|
|
4005
|
+
|
|
4006
|
+
def scale_linewidth_manual(
|
|
4007
|
+
*,
|
|
4008
|
+
values: Any,
|
|
4009
|
+
breaks: Any = None,
|
|
4010
|
+
na_value: Any = np.nan,
|
|
4011
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
4012
|
+
**kwargs: Any,
|
|
4013
|
+
) -> ScaleDiscrete:
|
|
4014
|
+
"""Linewidth manual scale.
|
|
4015
|
+
|
|
4016
|
+
Parameters
|
|
4017
|
+
----------
|
|
4018
|
+
values, breaks, na_value, aesthetics
|
|
4019
|
+
Standard parameters.
|
|
4020
|
+
**kwargs
|
|
4021
|
+
Passed to ``_manual_scale``.
|
|
4022
|
+
|
|
4023
|
+
Returns
|
|
4024
|
+
-------
|
|
4025
|
+
ScaleDiscrete
|
|
4026
|
+
"""
|
|
4027
|
+
if breaks is None:
|
|
4028
|
+
breaks = waiver()
|
|
4029
|
+
return _manual_scale(aesthetics, values, breaks, na_value=na_value, **kwargs)
|
|
4030
|
+
|
|
4031
|
+
|
|
4032
|
+
def scale_linewidth_date(
|
|
4033
|
+
name: Any = None,
|
|
4034
|
+
*,
|
|
4035
|
+
range: Optional[Sequence[float]] = None,
|
|
4036
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
4037
|
+
**kwargs: Any,
|
|
4038
|
+
) -> ScaleContinuous:
|
|
4039
|
+
"""Linewidth date scale.
|
|
4040
|
+
|
|
4041
|
+
Parameters
|
|
4042
|
+
----------
|
|
4043
|
+
name, range, aesthetics
|
|
4044
|
+
Standard parameters.
|
|
4045
|
+
**kwargs
|
|
4046
|
+
Passed to :func:`continuous_scale`.
|
|
4047
|
+
|
|
4048
|
+
Returns
|
|
4049
|
+
-------
|
|
4050
|
+
ScaleContinuous
|
|
4051
|
+
"""
|
|
4052
|
+
palette = pal_rescale(range) if range is not None else None
|
|
4053
|
+
return continuous_scale(
|
|
4054
|
+
aesthetics,
|
|
4055
|
+
palette=palette,
|
|
4056
|
+
name=name,
|
|
4057
|
+
transform=transform_date(),
|
|
4058
|
+
fallback_palette=pal_rescale((1, 6)),
|
|
4059
|
+
**kwargs,
|
|
4060
|
+
)
|
|
4061
|
+
|
|
4062
|
+
|
|
4063
|
+
def scale_linewidth_datetime(
|
|
4064
|
+
name: Any = None,
|
|
4065
|
+
*,
|
|
4066
|
+
range: Optional[Sequence[float]] = None,
|
|
4067
|
+
aesthetics: Union[str, List[str]] = "linewidth",
|
|
4068
|
+
**kwargs: Any,
|
|
4069
|
+
) -> ScaleContinuous:
|
|
4070
|
+
"""Linewidth datetime scale.
|
|
4071
|
+
|
|
4072
|
+
Parameters
|
|
4073
|
+
----------
|
|
4074
|
+
name, range, aesthetics
|
|
4075
|
+
Standard parameters.
|
|
4076
|
+
**kwargs
|
|
4077
|
+
Passed to :func:`continuous_scale`.
|
|
4078
|
+
|
|
4079
|
+
Returns
|
|
4080
|
+
-------
|
|
4081
|
+
ScaleContinuous
|
|
4082
|
+
"""
|
|
4083
|
+
palette = pal_rescale(range) if range is not None else None
|
|
4084
|
+
return continuous_scale(
|
|
4085
|
+
aesthetics,
|
|
4086
|
+
palette=palette,
|
|
4087
|
+
name=name,
|
|
4088
|
+
transform=transform_time(),
|
|
4089
|
+
fallback_palette=pal_rescale((1, 6)),
|
|
4090
|
+
**kwargs,
|
|
4091
|
+
)
|
|
4092
|
+
|
|
4093
|
+
|
|
4094
|
+
# =========================================================================
|
|
4095
|
+
# Stroke scales (mirrors scale_linewidth_* with aesthetics="stroke")
|
|
4096
|
+
# R: stroke has no dedicated scale_stroke() — it falls back to
|
|
4097
|
+
# continuous_scale("stroke", palette=pal_rescale(c(1,6))).
|
|
4098
|
+
# We provide explicit functions for user control and legend generation.
|
|
4099
|
+
# =========================================================================
|
|
4100
|
+
|
|
4101
|
+
|
|
4102
|
+
def scale_stroke_continuous(
|
|
4103
|
+
name: Any = None,
|
|
4104
|
+
*,
|
|
4105
|
+
breaks: Any = None,
|
|
4106
|
+
labels: Any = None,
|
|
4107
|
+
limits: Optional[Any] = None,
|
|
4108
|
+
range: Optional[Sequence[float]] = None,
|
|
4109
|
+
transform: Union[str, Any] = "identity",
|
|
4110
|
+
trans: Optional[Any] = None,
|
|
4111
|
+
guide: str = "legend",
|
|
4112
|
+
aesthetics: Union[str, List[str]] = "stroke",
|
|
4113
|
+
) -> ScaleContinuous:
|
|
4114
|
+
"""Continuous stroke scale (point border width)."""
|
|
4115
|
+
palette = pal_rescale(range) if range is not None else None
|
|
4116
|
+
return continuous_scale(
|
|
4117
|
+
aesthetics,
|
|
4118
|
+
palette=palette,
|
|
4119
|
+
name=name,
|
|
4120
|
+
breaks=breaks,
|
|
4121
|
+
labels=labels,
|
|
4122
|
+
limits=limits,
|
|
4123
|
+
transform=transform,
|
|
4124
|
+
trans=trans,
|
|
4125
|
+
guide=guide,
|
|
4126
|
+
fallback_palette=pal_rescale((0, 6)),
|
|
4127
|
+
)
|
|
4128
|
+
|
|
4129
|
+
|
|
4130
|
+
scale_stroke = scale_stroke_continuous
|
|
4131
|
+
|
|
4132
|
+
|
|
4133
|
+
def scale_stroke_binned(
|
|
4134
|
+
name: Any = None,
|
|
4135
|
+
*,
|
|
4136
|
+
breaks: Any = None,
|
|
4137
|
+
labels: Any = None,
|
|
4138
|
+
limits: Optional[Any] = None,
|
|
4139
|
+
range: Optional[Sequence[float]] = None,
|
|
4140
|
+
n_breaks: Optional[int] = None,
|
|
4141
|
+
nice_breaks: bool = True,
|
|
4142
|
+
transform: Union[str, Any] = "identity",
|
|
4143
|
+
trans: Optional[Any] = None,
|
|
4144
|
+
guide: str = "bins",
|
|
4145
|
+
aesthetics: Union[str, List[str]] = "stroke",
|
|
4146
|
+
) -> ScaleBinned:
|
|
4147
|
+
"""Binned stroke scale."""
|
|
4148
|
+
palette = pal_rescale(range) if range is not None else None
|
|
4149
|
+
return binned_scale(
|
|
4150
|
+
aesthetics,
|
|
4151
|
+
palette=palette,
|
|
4152
|
+
name=name,
|
|
4153
|
+
breaks=breaks,
|
|
4154
|
+
labels=labels,
|
|
4155
|
+
limits=limits,
|
|
4156
|
+
transform=transform,
|
|
4157
|
+
trans=trans,
|
|
4158
|
+
n_breaks=n_breaks,
|
|
4159
|
+
nice_breaks=nice_breaks,
|
|
4160
|
+
guide=guide,
|
|
4161
|
+
fallback_palette=pal_rescale((0, 6)),
|
|
4162
|
+
)
|
|
4163
|
+
|
|
4164
|
+
|
|
4165
|
+
def scale_stroke_discrete(
|
|
4166
|
+
name: Any = None,
|
|
4167
|
+
*,
|
|
4168
|
+
aesthetics: Union[str, List[str]] = "stroke",
|
|
4169
|
+
**kwargs: Any,
|
|
4170
|
+
) -> Any:
|
|
4171
|
+
"""Discrete stroke scale (delegates to ordinal)."""
|
|
4172
|
+
return scale_stroke_ordinal(name=name, **kwargs)
|
|
4173
|
+
|
|
4174
|
+
|
|
4175
|
+
def scale_stroke_ordinal(
|
|
4176
|
+
name: Any = None,
|
|
4177
|
+
*,
|
|
4178
|
+
range: Optional[Sequence[float]] = None,
|
|
4179
|
+
aesthetics: Union[str, List[str]] = "stroke",
|
|
4180
|
+
**kwargs: Any,
|
|
4181
|
+
) -> ScaleContinuous:
|
|
4182
|
+
"""Ordinal stroke scale."""
|
|
4183
|
+
palette = pal_rescale(range) if range is not None else None
|
|
4184
|
+
return continuous_scale(
|
|
4185
|
+
aesthetics,
|
|
4186
|
+
palette=palette,
|
|
4187
|
+
name=name,
|
|
4188
|
+
fallback_palette=pal_rescale((0, 6)),
|
|
4189
|
+
**kwargs,
|
|
4190
|
+
)
|
|
4191
|
+
|
|
4192
|
+
|
|
4193
|
+
def scale_stroke_identity(
|
|
4194
|
+
name: Any = None,
|
|
4195
|
+
*,
|
|
4196
|
+
guide: str = "none",
|
|
4197
|
+
aesthetics: Union[str, List[str]] = "stroke",
|
|
4198
|
+
**kwargs: Any,
|
|
4199
|
+
) -> ScaleContinuous:
|
|
4200
|
+
"""Identity stroke scale (values used as-is)."""
|
|
4201
|
+
return continuous_scale(
|
|
4202
|
+
aesthetics,
|
|
4203
|
+
palette=identity_pal(),
|
|
4204
|
+
name=name,
|
|
4205
|
+
guide=guide,
|
|
4206
|
+
**kwargs,
|
|
4207
|
+
)
|
|
4208
|
+
|
|
4209
|
+
|
|
4210
|
+
def scale_stroke_manual(
|
|
4211
|
+
name: Any = None,
|
|
4212
|
+
*,
|
|
4213
|
+
values: Any = None,
|
|
4214
|
+
aesthetics: Union[str, List[str]] = "stroke",
|
|
4215
|
+
**kwargs: Any,
|
|
4216
|
+
) -> ScaleContinuous:
|
|
4217
|
+
"""Manual stroke scale."""
|
|
4218
|
+
from scales import manual_pal
|
|
4219
|
+
return continuous_scale(
|
|
4220
|
+
aesthetics,
|
|
4221
|
+
palette=manual_pal(values) if values is not None else None,
|
|
4222
|
+
name=name,
|
|
4223
|
+
**kwargs,
|
|
4224
|
+
)
|
|
4225
|
+
|
|
4226
|
+
|
|
4227
|
+
# =========================================================================
|
|
4228
|
+
# American spelling aliases (color -> colour)
|
|
4229
|
+
# =========================================================================
|
|
4230
|
+
|
|
4231
|
+
scale_color_continuous = scale_colour_continuous
|
|
4232
|
+
scale_color_discrete = scale_colour_discrete
|
|
4233
|
+
scale_color_gradient = scale_colour_gradient
|
|
4234
|
+
scale_color_gradient2 = scale_colour_gradient2
|
|
4235
|
+
scale_color_gradientn = scale_colour_gradientn
|
|
4236
|
+
scale_color_hue = scale_colour_hue
|
|
4237
|
+
scale_color_brewer = scale_colour_brewer
|
|
4238
|
+
scale_color_distiller = scale_colour_distiller
|
|
4239
|
+
scale_color_fermenter = scale_colour_fermenter
|
|
4240
|
+
scale_color_grey = scale_colour_grey
|
|
4241
|
+
scale_color_viridis_c = scale_colour_viridis_c
|
|
4242
|
+
scale_color_viridis_d = scale_colour_viridis_d
|
|
4243
|
+
scale_color_viridis_b = scale_colour_viridis_b
|
|
4244
|
+
scale_color_binned = scale_colour_binned
|
|
4245
|
+
scale_color_steps = scale_colour_steps
|
|
4246
|
+
scale_color_steps2 = scale_colour_steps2
|
|
4247
|
+
scale_color_stepsn = scale_colour_stepsn
|
|
4248
|
+
scale_color_identity = scale_colour_identity
|
|
4249
|
+
scale_color_manual = scale_colour_manual
|
|
4250
|
+
scale_color_date = scale_colour_date
|
|
4251
|
+
scale_color_datetime = scale_colour_datetime
|
|
4252
|
+
scale_color_ordinal = scale_colour_ordinal
|