lets-plot 4.7.2rc1__cp39-cp39-win_amd64.whl → 4.8.0rc1__cp39-cp39-win_amd64.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.

Potentially problematic release.


This version of lets-plot might be problematic. Click here for more details.

Files changed (29) hide show
  1. lets_plot/__init__.py +1 -1
  2. lets_plot/_version.py +1 -1
  3. lets_plot/bistro/_plot2d_common.py +6 -0
  4. lets_plot/bistro/joint.py +4 -4
  5. lets_plot/bistro/residual.py +1 -1
  6. lets_plot/export/ggsave_.py +35 -18
  7. lets_plot/package_data/lets-plot.min.js +1 -1
  8. lets_plot/plot/core.py +38 -7
  9. lets_plot/plot/facet.py +3 -3
  10. lets_plot/plot/geom.py +295 -16
  11. lets_plot/plot/geom_livemap_.py +8 -0
  12. lets_plot/plot/gggrid_.py +20 -7
  13. lets_plot/plot/ggtb_.py +28 -2
  14. lets_plot/plot/label.py +1 -1
  15. lets_plot/plot/pos.py +32 -8
  16. lets_plot/plot/scale_identity_.py +20 -16
  17. lets_plot/plot/theme_.py +18 -10
  18. lets_plot/plot/theme_set.py +39 -15
  19. lets_plot/plot/tooltip.py +1 -1
  20. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/METADATA +10 -6
  21. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/RECORD +29 -29
  22. lets_plot_kotlin_bridge.cp39-win_amd64.pyd +0 -0
  23. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/WHEEL +0 -0
  24. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/licenses/LICENSE +0 -0
  25. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/licenses/licenses/LICENSE.FreeType +0 -0
  26. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/licenses/licenses/LICENSE.ImageMagick +0 -0
  27. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/licenses/licenses/LICENSE.expat +0 -0
  28. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/licenses/licenses/LICENSE.fontconfig +0 -0
  29. {lets_plot-4.7.2rc1.dist-info → lets_plot-4.8.0rc1.dist-info}/top_level.txt +0 -0
lets_plot/plot/ggtb_.py CHANGED
@@ -7,7 +7,7 @@ from .core import FeatureSpec
7
7
  __all__ = ['ggtb']
8
8
 
9
9
 
10
- def ggtb() -> FeatureSpec:
10
+ def ggtb(size_basis=None, size_zoomin=None) -> FeatureSpec:
11
11
  """
12
12
  Add a toolbar to a chart.
13
13
 
@@ -31,6 +31,32 @@ def ggtb() -> FeatureSpec:
31
31
  - The toolbar does not work with interactive maps.
32
32
  - The toolbar cannot be used with plots using a polar coordinate system.
33
33
 
34
+ Parameters
35
+ ----------
36
+ size_zoomin : int, default=0
37
+ Control how zooming in affects the size of geometry objects on the plot. Currently, works only with
38
+ the geom_point layer and layers based on it (geom_jitter, geom_sina, etc.).
39
+
40
+ 0 - size never increases;
41
+
42
+ -1 - size will be increasing without limits;
43
+
44
+ n - the number of times the size of objects will increase (relative to the initial state of the plot).
45
+ Farther zooming will no longer affect the size.
46
+
47
+ size_basis : {'x', 'y', 'min', 'max'}, default='max'
48
+ Defines the axis along which the scaling factor for geometry objects will be calculated.
49
+
50
+ 'x' - size changes only when zooming in/out along x-axis;
51
+
52
+ 'y' - size changes only when zooming in/out along y-axis;
53
+
54
+ 'min' - size changes when zooming in/out along any axis, but the change is determined by the axis
55
+ with the minimum zoom factor;
56
+
57
+ 'max' - size changes when zooming in/out along any axis, but the change is determined by the axis
58
+ with the maximum zoom factor.
59
+
34
60
  Returns
35
61
  -------
36
62
  ``FeatureSpec``
@@ -52,4 +78,4 @@ def ggtb() -> FeatureSpec:
52
78
  ggtb()
53
79
 
54
80
  """
55
- return FeatureSpec(kind='ggtoolbar', name=None)
81
+ return FeatureSpec(kind='ggtoolbar', name=None, size_basis=size_basis, size_zoomin=size_zoomin)
lets_plot/plot/label.py CHANGED
@@ -32,7 +32,7 @@ def ggtitle(label, subtitle=None):
32
32
 
33
33
  Notes
34
34
  -----
35
- Split a long title/subtitle into two lines or more using ``\\\\n`` as a text separator.
35
+ Split a long title/subtitle into two lines or more using ``\\n`` as a text separator.
36
36
 
37
37
  Examples
38
38
  --------
lets_plot/plot/pos.py CHANGED
@@ -251,17 +251,29 @@ def position_stack(vjust=None, mode=None):
251
251
  --------
252
252
  .. jupyter-execute::
253
253
  :linenos:
254
- :emphasize-lines: 9
254
+ :emphasize-lines: 12,18
255
255
 
256
256
  from lets_plot import *
257
257
  LetsPlot.setup_html()
258
258
  data = {
259
- 'x': [1, 1, 1, 2, 2, 2],
259
+ 'x': [-2, -2, -2, 2, 2, 2],
260
260
  'y': [1, 2, 3, 1, 2, 3],
261
261
  'g': ["a", "b", "b", "a", "a", "b"],
262
262
  }
263
- ggplot(data, aes('x', 'y', color='g')) + \\
264
- geom_point(position=position_stack(), size=10)
263
+ gggrid([
264
+ ggplot(data, aes('x', 'y', fill='g')) + \\
265
+ geom_label(aes(label='y'), size=10,
266
+ color="white", show_legend=False,
267
+ position=position_stack(mode='groups')) + \\
268
+ scale_y_continuous(limits=[0, 6]) + \\
269
+ ggtitle("mode='groups'"),
270
+ ggplot(data, aes('x', 'y', fill='g')) + \\
271
+ geom_label(aes(label='y'), size=10,
272
+ color="white", show_legend=False,
273
+ position=position_stack(mode='all')) + \\
274
+ scale_y_continuous(limits=[0, 6]) + \\
275
+ ggtitle("mode='all'"),
276
+ ])
265
277
 
266
278
  """
267
279
  return _pos('stack', vjust=vjust, mode=mode)
@@ -298,17 +310,29 @@ def position_fill(vjust=None, mode=None):
298
310
  --------
299
311
  .. jupyter-execute::
300
312
  :linenos:
301
- :emphasize-lines: 9
313
+ :emphasize-lines: 12,18
302
314
 
303
315
  from lets_plot import *
304
316
  LetsPlot.setup_html()
305
317
  data = {
306
318
  'x': [1, 1, 1, 1, 1, 2, 2, 2],
307
- 'y': [1, 2, 3, 4, 5, 1, 2, 3],
319
+ 'y': [1, 2, 1, 3, 5, 1, 2, 2],
308
320
  'g': ["a", "a", "b", "b", "b", "a", "a", "b"],
309
321
  }
310
- ggplot(data, aes('x', 'y', color='g')) + \\
311
- geom_point(position=position_fill(), size=10)
322
+ gggrid([
323
+ ggplot(data, aes('x', 'y', fill='g')) + \\
324
+ geom_label(aes(label='y'), size=10,
325
+ color="white", show_legend=False,
326
+ position=position_fill(mode='groups')) + \\
327
+ coord_cartesian(ylim=[0, 1.1]) + \\
328
+ ggtitle("mode='groups'"),
329
+ ggplot(data, aes('x', 'y', fill='g')) + \\
330
+ geom_label(aes(label='y'), size=10,
331
+ color="white", show_legend=False,
332
+ position=position_fill(mode='all')) + \\
333
+ coord_cartesian(ylim=[0, 1.1]) + \\
334
+ ggtitle("mode='all'"),
335
+ ])
312
336
 
313
337
  """
314
338
  return _pos('fill', vjust=vjust, mode=mode)
@@ -21,7 +21,8 @@ __all__ = ['scale_identity',
21
21
 
22
22
 
23
23
  def scale_identity(aesthetic, *,
24
- name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None, **other):
24
+ name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
25
+ format=None, **other):
25
26
  """
26
27
  Use this scale when your data has already been scaled.
27
28
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -95,7 +96,8 @@ def scale_identity(aesthetic, *,
95
96
  **other)
96
97
 
97
98
 
98
- def scale_color_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
99
+ def scale_color_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
100
+ format=None):
99
101
  """
100
102
  Use this scale when your data has already been scaled.
101
103
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -164,7 +166,8 @@ def scale_color_identity(name=None, breaks=None, labels=None, lablim=None, limit
164
166
  format=format)
165
167
 
166
168
 
167
- def scale_fill_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
169
+ def scale_fill_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
170
+ format=None):
168
171
  """
169
172
  Use this scale when your data has already been scaled.
170
173
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -233,7 +236,8 @@ def scale_fill_identity(name=None, breaks=None, labels=None, lablim=None, limits
233
236
  format=format)
234
237
 
235
238
 
236
- def scale_shape_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
239
+ def scale_shape_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
240
+ format=None):
237
241
  """
238
242
  Use this scale when your data has already been scaled.
239
243
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -300,13 +304,11 @@ def scale_shape_identity(name=None, breaks=None, labels=None, lablim=None, limit
300
304
  limits=limits,
301
305
  na_value=na_value,
302
306
  guide=guide,
303
- format=format,
304
- #
305
- solid=None,
306
- discrete=True)
307
+ format=format)
307
308
 
308
309
 
309
- def scale_linetype_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
310
+ def scale_linetype_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
311
+ format=None):
310
312
  """
311
313
  Use this scale when your data has already been scaled.
312
314
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -377,12 +379,11 @@ def scale_linetype_identity(name=None, breaks=None, labels=None, lablim=None, li
377
379
  limits=limits,
378
380
  na_value=na_value,
379
381
  guide=guide,
380
- format=format,
381
- #
382
- discrete=True)
382
+ format=format)
383
383
 
384
384
 
385
- def scale_alpha_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
385
+ def scale_alpha_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
386
+ format=None):
386
387
  """
387
388
  Use this scale when your data has already been scaled.
388
389
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -452,7 +453,8 @@ def scale_alpha_identity(name=None, breaks=None, labels=None, lablim=None, limit
452
453
  format=format)
453
454
 
454
455
 
455
- def scale_size_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
456
+ def scale_size_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
457
+ format=None):
456
458
  """
457
459
  Use this scale when your data has already been scaled.
458
460
  I.e. it already represents aesthetic values that the library can handle directly.
@@ -522,7 +524,8 @@ def scale_size_identity(name=None, breaks=None, labels=None, lablim=None, limits
522
524
  format=format)
523
525
 
524
526
 
525
- def scale_linewidth_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
527
+ def scale_linewidth_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
528
+ format=None):
526
529
  """
527
530
  Use this scale when your data has already been scaled.
528
531
  I.e. it already represents aesthetic values that can be handled directly.
@@ -590,7 +593,8 @@ def scale_linewidth_identity(name=None, breaks=None, labels=None, lablim=None, l
590
593
  format=format)
591
594
 
592
595
 
593
- def scale_stroke_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none', format=None):
596
+ def scale_stroke_identity(name=None, breaks=None, labels=None, lablim=None, limits=None, na_value=None, guide='none',
597
+ format=None):
594
598
  """
595
599
  Use this scale when your data has already been scaled.
596
600
  I.e. it already represents aesthetic values that can be handled directly.
lets_plot/plot/theme_.py CHANGED
@@ -102,7 +102,7 @@ def theme(*,
102
102
 
103
103
  Parameters
104
104
  ----------
105
- exponent_format : {'e', 'pow', 'pow_full'} or tuple, default='e'
105
+ exponent_format : {'e', 'pow', 'pow_full'} or tuple, default='pow'
106
106
  Controls the appearance of numbers formatted with 'e' or 'g' types.
107
107
 
108
108
  Value is either a string - style, or a tuple: (style, lower_exp_bound, upper_exp_bound)
@@ -178,15 +178,16 @@ def theme(*,
178
178
  Set 'blank' or result of `element_blank() <https://lets-plot.org/python/pages/api/lets_plot.element_blank.html>`__ to draw nothing and assign no space.
179
179
  Set `element_text() <https://lets-plot.org/python/pages/api/lets_plot.element_text.html>`__ to specify legend title parameters, inherited from ``title``.
180
180
  legend_position : {'none', 'left', 'right', 'bottom', 'top'} or list
181
- The position of legends. To remove the plot legend, use the 'none' value.
182
- If parameter is a list, then it should be a two-element numeric vector,
183
- specifying the position inside the plotting area,
184
- each value of float type between 0 and 1.
185
- legend_justification : str or list
186
- Anchor point for positioning legend. If parameter is a list, then
187
- it should be a two-element numeric vector. The pair [0, 0] corresponds to the
188
- bottom left corner, the pair [1, 1] corresponds to the top right.
189
- For string parameter the only possible value is 'center'.
181
+ The position of legends.
182
+ To remove the plot legend, use the 'none' value.
183
+ If parameter is a list, then it should be a two-element numeric vector [x, y], where each value is between 0 and 1.
184
+ These coordinates position the legend inside the plotting area, where [0, 0] is the bottom left corner and [1, 1] is the top right corner.
185
+ The anchor point of the legend box can be controlled with ``legend_justification``.
186
+ legend_justification : {'center', 'left', 'right', 'top', 'bottom'} or list
187
+ Anchor point of the legend box for positioning.
188
+ Determines which point of the legend box is placed at the coordinates specified by ``legend_position``.
189
+ If parameter is a list, then it should be a two-element numeric vector [x, y], where each value is between 0 and 1.
190
+ The pair [0, 0] corresponds to the bottom left corner of the legend box, and [1, 1] corresponds to the top right corner.
190
191
  legend_direction : {'horizontal', 'vertical'}
191
192
  Layout of items in legends.
192
193
  legend_margin : number or list of numbers
@@ -669,6 +670,13 @@ def element_markdown(
669
670
  Specify how non-data components of the plot are drawn.
670
671
  This theme element draws text with Markdown support.
671
672
 
673
+ Supported features:
674
+
675
+ - Emphasis (\*, \*\*, \*\*\*, _, __, ___)
676
+ - Coloring with inline style (<span style='color:red'>text</span>)
677
+ - Links with anchor tags (<a href="https://lets-plot.org">Lets-Plot</a>). Supports target attribute (default is "_blank")
678
+ - Multiple lines using double space and a newline delimiter ( ``\\n``)
679
+
672
680
  Parameters
673
681
  ----------
674
682
  color : str
@@ -6,6 +6,7 @@ from .core import FeatureSpec
6
6
 
7
7
  __all__ = [
8
8
  'theme_grey',
9
+ 'theme_gray',
9
10
  'theme_light',
10
11
  'theme_classic',
11
12
  'theme_minimal',
@@ -17,13 +18,14 @@ __all__ = [
17
18
  'flavor_solarized_light',
18
19
  'flavor_solarized_dark',
19
20
  'flavor_high_contrast_light',
20
- 'flavor_high_contrast_dark'
21
+ 'flavor_high_contrast_dark',
22
+ 'flavor_standard'
21
23
  ]
22
24
 
23
25
 
24
26
  def theme_grey():
25
27
  """
26
- Grey background and white gridlines.
28
+ Set the grey background with white gridlines.
27
29
 
28
30
  Returns
29
31
  -------
@@ -48,9 +50,16 @@ def theme_grey():
48
50
  return FeatureSpec('theme', name="grey")
49
51
 
50
52
 
53
+ def theme_gray():
54
+ """
55
+ Set the gray background with white gridlines. It is an alias for `theme_grey() <https://lets-plot.org/python/pages/api/lets_plot.theme_grey.html>`__
56
+ """
57
+ return FeatureSpec('theme', name="gray")
58
+
59
+
51
60
  def theme_light():
52
61
  """
53
- Light grey lines of various widths on white background.
62
+ Set the light grey lines of various widths on the white background.
54
63
 
55
64
  Returns
56
65
  -------
@@ -77,7 +86,7 @@ def theme_light():
77
86
 
78
87
  def theme_classic():
79
88
  """
80
- Dark grey axes and no gridlines.
89
+ Set the dark grey axes and no gridlines on the white background.
81
90
 
82
91
  Returns
83
92
  -------
@@ -104,7 +113,7 @@ def theme_classic():
104
113
 
105
114
  def theme_minimal():
106
115
  """
107
- A minimalistic theme without axes lines.
116
+ Set a minimalistic theme without axes lines.
108
117
 
109
118
  Returns
110
119
  -------
@@ -131,8 +140,8 @@ def theme_minimal():
131
140
 
132
141
  def theme_minimal2():
133
142
  """
134
- Default theme similar to `theme_minimal() <https://lets-plot.org/python/pages/api/lets_plot.theme_minimal.html>`__
135
- but with x axis line and only major grid lines.
143
+ Set the default theme similar to `theme_minimal() <https://lets-plot.org/python/pages/api/lets_plot.theme_minimal.html>`__
144
+ adding an x-axis line and only major gridlines.
136
145
 
137
146
  Returns
138
147
  -------
@@ -159,7 +168,7 @@ def theme_minimal2():
159
168
 
160
169
  def theme_none():
161
170
  """
162
- Basic settings are applied.
171
+ Set a basic blue-accented scheme with the light blue background.
163
172
 
164
173
  Returns
165
174
  -------
@@ -186,7 +195,7 @@ def theme_none():
186
195
 
187
196
  def theme_bw():
188
197
  """
189
- Grey lines on white background with dark grey plot border.
198
+ Set a dark grey plot border and grey gridlines on the white background.
190
199
 
191
200
  Returns
192
201
  -------
@@ -213,7 +222,8 @@ def theme_bw():
213
222
 
214
223
  def theme_void():
215
224
  """
216
- A completely blank (or "void") background theme: no borders, axes, or gridlines.
225
+ Set a completely blank (or "void") background theme by removing all
226
+ non-data elements: no borders, axes, or gridlines.
217
227
 
218
228
  Returns
219
229
  -------
@@ -241,7 +251,7 @@ def theme_void():
241
251
 
242
252
  def flavor_darcula():
243
253
  """
244
- Darcula color scheme.
254
+ Set the Darcula color scheme.
245
255
 
246
256
  Returns
247
257
  -------
@@ -272,7 +282,7 @@ def flavor_darcula():
272
282
 
273
283
  def flavor_solarized_light():
274
284
  """
275
- Solarized light color scheme.
285
+ Set the Solarized Light color scheme.
276
286
 
277
287
  Returns
278
288
  -------
@@ -303,7 +313,7 @@ def flavor_solarized_light():
303
313
 
304
314
  def flavor_solarized_dark():
305
315
  """
306
- Solarized dark color scheme.
316
+ Set the Solarized Dark color scheme.
307
317
 
308
318
  Returns
309
319
  -------
@@ -334,7 +344,7 @@ def flavor_solarized_dark():
334
344
 
335
345
  def flavor_high_contrast_light():
336
346
  """
337
- High contrast light color scheme.
347
+ Set a high-contrast light color scheme.
338
348
 
339
349
  Returns
340
350
  -------
@@ -365,7 +375,7 @@ def flavor_high_contrast_light():
365
375
 
366
376
  def flavor_high_contrast_dark():
367
377
  """
368
- High contrast dark color scheme.
378
+ Set a high-contrast dark color scheme.
369
379
 
370
380
  Returns
371
381
  -------
@@ -392,3 +402,17 @@ def flavor_high_contrast_dark():
392
402
 
393
403
  """
394
404
  return FeatureSpec('theme', name=None, flavor="high_contrast_dark")
405
+
406
+
407
+ def flavor_standard():
408
+ """
409
+ Set the theme’s default color scheme.
410
+ Use to override other flavors or make defaults explicit.
411
+
412
+ Returns
413
+ -------
414
+ ``FeatureSpec``
415
+ Theme specification.
416
+
417
+ """
418
+ return FeatureSpec('theme', name=None, flavor="standard")
lets_plot/plot/tooltip.py CHANGED
@@ -418,7 +418,7 @@ class layer_tooltips(FeatureSpec):
418
418
  The specification rules are the same as for the ``lines()`` function:
419
419
  variables and aesthetics can be used in the template.
420
420
  The resulting string will be at the beginning of the general tooltip, centered and highlighted in bold.
421
- A long title can be split into multiple lines using ``\\\\n`` as a text separator.
421
+ A long title can be split into multiple lines using ``\\n`` as a text separator.
422
422
 
423
423
  Examples
424
424
  --------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lets-plot
3
- Version: 4.7.2rc1
3
+ Version: 4.8.0rc1
4
4
  Summary: An open source library for statistical plotting
5
5
  Home-page: https://lets-plot.org
6
6
  Author: JetBrains
@@ -59,7 +59,7 @@ Dynamic: summary
59
59
 
60
60
  **Lets-Plot** is a multiplatform plotting library built on the principles of the Grammar of Graphics.
61
61
 
62
- The library' design is heavily influenced by Leland Wilkinson work [The Grammar of Graphics](https://www.goodreads.com/book/show/2549408.The_Grammar_of_Graphics) describing the deep features that underlie all statistical graphics.
62
+ The library design is heavily influenced by Leland Wilkinson's work [The Grammar of Graphics](https://www.goodreads.com/book/show/2549408.The_Grammar_of_Graphics) describing the deep features that underlie all statistical graphics.
63
63
 
64
64
  > This grammar [...] is made up of a set of independent components that can be composed in many different ways. This makes [it] very powerful because you are not limited to a set of pre-specified graphics, but you can create new graphics that are precisely tailored for your problem.
65
65
  > - Hadley Wickham, "[ggplot2: Elegant Graphics for Data Analysis](https://ggplot2-book.org/index.html)"
@@ -68,7 +68,7 @@ The library' design is heavily influenced by Leland Wilkinson work [The Grammar
68
68
  ## Grammar of Graphics for Python [![Latest Release](https://badge.fury.io/py/lets-plot.svg)](https://pypi.org/project/lets-plot)
69
69
 
70
70
  A bridge between R (ggplot2) and Python data visualization. \
71
- To learn more see the documentation site at **[lets-plot.org](https://lets-plot.org)**.
71
+ To learn more, see the documentation site at **[lets-plot.org/python](https://lets-plot.org/python)**.
72
72
 
73
73
 
74
74
  ## Grammar of Graphics for Kotlin [![Latest Release](https://img.shields.io/github/v/release/JetBrains/lets-plot-kotlin)](https://github.com/JetBrains/lets-plot-kotlin/releases/latest)
@@ -77,15 +77,19 @@ To learn more see the documentation site at **[lets-plot.org](https://lets-plot.
77
77
  Create plots in [Kotlin Notebook](https://plugins.jetbrains.com/plugin/16340-kotlin-notebook),
78
78
  [Datalore](https://datalore.jetbrains.com/report/static/HZqq77cegYd.E7get_WnChZ/aTA9lQnPkRwdCzT6uy95GZ), [Jupyter with Kotlin Kernel](https://github.com/Kotlin/kotlin-jupyter#readme) \
79
79
  or any other notebook that supports `Kotlin Kernel`. \
80
- To learn more see the **[Lets-Plot Kotlin API](https://github.com/JetBrains/lets-plot-kotlin)** project at GitHub.
80
+ To learn more, see the **[Lets-Plot Kotlin API](https://github.com/JetBrains/lets-plot-kotlin)** project at GitHub.
81
81
 
82
82
  ### Compose Multiplatform
83
83
  Embed Lets-Plot charts in [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform) applications. \
84
- To learn more see the **[Lets-Plot Skia Frontend](https://github.com/JetBrains/lets-plot-skia)** project at GitHub.
84
+ To learn more, see the **[Lets-Plot Compose Frontend](https://github.com/JetBrains/lets-plot-compose)** project at GitHub.
85
85
 
86
86
  ### JVM and Kotlin/JS
87
87
  Embed Lets-Plot charts in JVM (Swing, JavaFX) and Kotlin/JS applications. <br>
88
- To learn more see the **[Lets-Plot Kotlin API](https://github.com/JetBrains/lets-plot-kotlin)** project at GitHub.
88
+ To learn more, see the **[Lets-Plot Kotlin API](https://github.com/JetBrains/lets-plot-kotlin)** project at GitHub.
89
+
90
+ ### Documentation
91
+
92
+ Kotlin API documentation site: [lets-plot.org/kotlin](https://lets-plot.org/kotlin).
89
93
 
90
94
  ## "Lets-Plot in SciView" plugin
91
95
 
@@ -1,22 +1,22 @@
1
- lets_plot_kotlin_bridge.cp39-win_amd64.pyd,sha256=ix6Pj7d48O19dzTtM676MeHkzXYPG3Qjl3BqOdZjBQY,13697536
2
- lets_plot/__init__.py,sha256=1zVRVEG3f5KaO_CRbqjmzPlhp7aMojEqG5XwWLl1O4M,12462
1
+ lets_plot_kotlin_bridge.cp39-win_amd64.pyd,sha256=hbQLIuBXeQ5grY5P2E36piC_Y5LH0X8ZI5rvY8D5yOk,13608960
2
+ lets_plot/__init__.py,sha256=8h0rAxVivxKwrbOku-6c9wKd37uRuvJVV6G_8ydtMCk,12462
3
3
  lets_plot/_global_settings.py,sha256=TASePWgnoqgZd7Q6LTxa6FK_rrWTab-FR7x7ht8Xof0,7694
4
4
  lets_plot/_kbridge.py,sha256=-AhNO7UV1Pt4lyv_z8EE3Dg0sseX9DT8b2jUMVECvRA,5816
5
5
  lets_plot/_type_utils.py,sha256=wKztT6Vd0etMKRoLzNMEW0GBNoy5fUddutzFdGvKYs8,3961
6
- lets_plot/_version.py,sha256=6w3dudPowRiKEa6nHJQMmSTsIrCAq_RMdMHvoW4MuIg,242
6
+ lets_plot/_version.py,sha256=uaKZsKCsACW5l0XA15Zb43Ndcolo1TyOh32WGiwIlfQ,242
7
7
  lets_plot/mapping.py,sha256=zv8WrXBZWe0h1wyTKRKtjhOFqVPL01CMsc7UcK4Ikys,3699
8
8
  lets_plot/settings_utils.py,sha256=SQrjv2VYgBnXO3b6mGuGWuki7L67Po8pJHcbtxTc26I,9331
9
9
  lets_plot/tilesets.py,sha256=8LC_GsrZd1X12rII28W1XbO7A8YfeG1AjBR8L_PPFVk,10810
10
10
  lets_plot/bistro/__init__.py,sha256=0vjEBjuS3r4MR8ugQ1zIo1sks6K0ljSESJWH3pQcgYI,442
11
- lets_plot/bistro/_plot2d_common.py,sha256=7cc_15IAzeTyq-zEwVlXdJ1ksAnymvOy8Yqgwzc05wU,3983
11
+ lets_plot/bistro/_plot2d_common.py,sha256=Xdaj8jcI6xfWihuSlGzNzSHrcFXvwvN_--Pm27lUExo,4228
12
12
  lets_plot/bistro/corr.py,sha256=YNajyOJWBA2QLdemf27Gizce1KHwRRiTUBT--Q-WjeU,14371
13
13
  lets_plot/bistro/im.py,sha256=phaPOKi2TdtNx-IO6ITiSUtCnKw6SwxAvVRTFWaZ7kk,6649
14
- lets_plot/bistro/joint.py,sha256=IvSIwGJGUVdNZnIIE0w8CtgFpV5AOpPUykkNBQdIsMg,6915
14
+ lets_plot/bistro/joint.py,sha256=C9t78cgaU1LyH_gf9VN0bZ81ahI23GocIobsqbB6A9c,6949
15
15
  lets_plot/bistro/qq.py,sha256=PuwGvKArnRvOU0HMCP-qKTPxg37tbnF5lAMESEuOY7U,8505
16
- lets_plot/bistro/residual.py,sha256=lwEiCMz4ewTxbMF9necBUE_OxqRLbBiVo3RGAK73hBA,12831
16
+ lets_plot/bistro/residual.py,sha256=NRGQkjWljc34jeHIRNyEuuTfU5oc-bQscLmaBGU3QiY,12847
17
17
  lets_plot/bistro/waterfall.py,sha256=fTIu-KVKsW7RKJ5CuTwzds3861zbeF3AzLBqmplESUc,15212
18
18
  lets_plot/export/__init__.py,sha256=JloMKV4OAMgxBuYg8ObByZ3LJvqcUKed1G286WLA85E,194
19
- lets_plot/export/ggsave_.py,sha256=u8VkdmEhK1YXxcde-3DjgqS0e7aiQsaOoorfaFMlcy8,5877
19
+ lets_plot/export/ggsave_.py,sha256=4XE5DrPQm4KIaopA4BsgQHAj_-KtrNbILdshfLl3-1o,6574
20
20
  lets_plot/frontend_context/__init__.py,sha256=LALJE-5rVdEcgCP-sWTwNAVoVZB-Pr2lG8CpVn04FrY,212
21
21
  lets_plot/frontend_context/_configuration.py,sha256=aLEd-P4KowiVgPQcd_-E0atD9xpkepKtAfuixUdx2_Q,5714
22
22
  lets_plot/frontend_context/_frontend_ctx.py,sha256=6ThMnNUp0FVKeFqnMCtOnIUSgsmC0TGQnQEUUCcRdjU,375
@@ -47,49 +47,49 @@ lets_plot/geo_data/gis/response.py,sha256=MsAk10JQe0XC-h4Cv0w7uzYxAtlx3YaSrqYXA6
47
47
  lets_plot/geo_data_internals/__init__.py,sha256=ZwcoMdyQ_k9589f2D3nXXjedJpyiDR8WyqaghTh_EVQ,238
48
48
  lets_plot/geo_data_internals/constants.py,sha256=2dViytUZPiojilhWV3UWzBAXgdHl5OoIJsNMsI0V7yU,441
49
49
  lets_plot/geo_data_internals/utils.py,sha256=8vfDa99yq1YpVNr-RDtpCJfbrON04rIG6cugpQXnJlU,1000
50
- lets_plot/package_data/lets-plot.min.js,sha256=8bBGDpK-9po3qlHzHViUy_8l4oD6dwP-gObC2lLCap0,2762913
50
+ lets_plot/package_data/lets-plot.min.js,sha256=XqtJ_R3Q5SfUapK0GnkZJQVKeoytKrA8VjXN9bnTNFk,2737178
51
51
  lets_plot/plot/__init__.py,sha256=JqOiE3XfvLripHZJO0_EUzRF10cljeJyU8z-jfFLMXE,1835
52
52
  lets_plot/plot/_global_theme.py,sha256=eatwhJiiqnY6mrNW0Y1NMco2e7xxldhItgj1IOkhRuI,311
53
53
  lets_plot/plot/annotation.py,sha256=-XnbLjO7ERF5UeCetmHojAzzHRstnYZWz8l1NSJkVvg,10141
54
54
  lets_plot/plot/coord.py,sha256=I6AzR0T_q2ia3nU_ecZVOauInfKXhI3V7mkFEMWS1p4,8226
55
- lets_plot/plot/core.py,sha256=fNgkfRSQd88RwlsViVpWFol6uz5XDP0tOwp7afoYhj0,36154
55
+ lets_plot/plot/core.py,sha256=gC8NCwE3_mJ2qpe151-Rn8FVHULQiRfTb6JNn5KS2g8,37639
56
56
  lets_plot/plot/expand_limits_.py,sha256=uoxx1_1nYAhELZIja31fDwZge0FqIs1kwexPAY1TrSY,2523
57
- lets_plot/plot/facet.py,sha256=IzWUBvH3vKh_FMNuYY1Jjr1QZnZU4SRkLC3hJ6XGWT8,7513
57
+ lets_plot/plot/facet.py,sha256=hvATPtNFEUWjeF7mU57KPmHb1eBIG455eq-Z579vxxU,7507
58
58
  lets_plot/plot/font_features.py,sha256=POmaOAlh3tLJtZs_7sRicnv7s7JbEF9d7qJR6YaOGk4,2313
59
- lets_plot/plot/geom.py,sha256=vykmbm9XBdfJCFggj7GOZHxZLJYbT_rC-7zXJAMH-Vo,419610
59
+ lets_plot/plot/geom.py,sha256=JZXMFvS_h1mCibvCeUIaY9Hn33VBLezBGc8BjHjc7a4,432429
60
60
  lets_plot/plot/geom_extras.py,sha256=xGv8RBz2h55OdHWliPzoKbUg5jaDlkfZ1toIZWK_ppI,1749
61
61
  lets_plot/plot/geom_function_.py,sha256=OeCOt5f2nSoAfVz9nNln2A6J-socIH59KiRxQ6bZqhM,8536
62
62
  lets_plot/plot/geom_imshow_.py,sha256=IHZdQnubgDhE5PmkrVXNGsW1JJ2yT0V3qCUiCdKLHE0,14998
63
- lets_plot/plot/geom_livemap_.py,sha256=z-KAgm-CJuN1E9Dx6TmtIqzSEBTWwbJ0LWp0UyK0cRw,13604
63
+ lets_plot/plot/geom_livemap_.py,sha256=cbPUpKTN9PbmbrDI5TCLKGjieVQiaLqwxnQaxzioVsU,13620
64
64
  lets_plot/plot/ggbunch_.py,sha256=dFH8C1044jkI4C_3ek-CsZfEqmVtWAnqoQ_aJXzDioU,3189
65
- lets_plot/plot/gggrid_.py,sha256=FIEFCbGhHQ7iPwnrx8KEGL4l2bL2DAAYlI_ew_NCo1g,4025
66
- lets_plot/plot/ggtb_.py,sha256=aQEaVHJR38nOBlQA5Dsxqg8PzMQpMA9hqOlympMHG_o,1694
65
+ lets_plot/plot/gggrid_.py,sha256=3GoRIiJ6JMW-_fCHfpu7WNVM23dlGGeaFEbpm5uDsDQ,4758
66
+ lets_plot/plot/ggtb_.py,sha256=uZbt-NJ7M__P54V87isp9TLzHSUHtuMQ_QL9--I91BE,2893
67
67
  lets_plot/plot/guide.py,sha256=fFBC-gE30iUZOQqB5KiLfrOgp5rTlfu0JPBvCZdjDes,7283
68
- lets_plot/plot/label.py,sha256=mDOlCOpKWOn6TIhCcNiXyPUr0GrbUwXMIXSHeMiEjTQ,4821
68
+ lets_plot/plot/label.py,sha256=XSjg6DT8DROWc9zWfuQN7yUSEJXBUMGgGQnhLKNvd1o,4819
69
69
  lets_plot/plot/marginal_layer.py,sha256=5pjRMCaMZxAMePBhhvcWtvx9aMfp_qqgImcMH_sbKos,6557
70
70
  lets_plot/plot/plot.py,sha256=i3y4TMBWkAPHP6oKnL9VfRQbFGYfgT8b-HuwB0cMReU,8627
71
- lets_plot/plot/pos.py,sha256=vsw6RD5_iIghkNnaHB1jnB18SwAMZ8_kqPo_bgBo85c,10549
71
+ lets_plot/plot/pos.py,sha256=2_D1oST612rfRmQ2LNzRItH0SX_xRz9kwIggJcL5UiU,11747
72
72
  lets_plot/plot/sampling.py,sha256=imX8p8EH2zshjSECzsvZlFUOLzw2MLFykJbHpEIBsBI,8843
73
73
  lets_plot/plot/sandbox_.py,sha256=5wp2bkIBsihw9aIoKr8FUQZmtZbInHPCULbG5uPsMYE,571
74
74
  lets_plot/plot/scale.py,sha256=1v6FL-FFJv2xWhtgSiuRpUGVm-2VsInLr2CQHYgjzLk,145685
75
75
  lets_plot/plot/scale_colormap_mpl.py,sha256=iWABnyUtwKcWiovZVMZ1SftQF0Kg-07C8KERTaJwlUY,11029
76
76
  lets_plot/plot/scale_convenience.py,sha256=4JgHKxXZJvdYIq-yXVhysrw4ndO5Z54D05XstXgT5qQ,4283
77
- lets_plot/plot/scale_identity_.py,sha256=XPHMq67zSHC4OeknaRMRnORwLhZEe9YXsKz2psLF9nI,24474
77
+ lets_plot/plot/scale_identity_.py,sha256=rvvRjeR1uXJ04d65HZ7zcPDfoc1phmyO17tw90eTOIo,24527
78
78
  lets_plot/plot/scale_position.py,sha256=fxh90JhelfY72vkaGMVvbBWhUddII_oOJIIWHFwLcyQ,48346
79
79
  lets_plot/plot/series_meta.py,sha256=OhjXWDOui5E05fSiIXECAhK3yntGF5vXczb8np33ohw,7371
80
80
  lets_plot/plot/stat.py,sha256=_RT87KFoa7BCvDtr7boHpOyI7yrpxcLoRRiSy-B3JTA,24986
81
81
  lets_plot/plot/subplots.py,sha256=UkMb_Putpluk2O1OUMjukagc95YVdF2_CuRYw5yM_F0,12183
82
82
  lets_plot/plot/subplots_util.py,sha256=PBwR7pGtYJAz4lJ0TNRH645aAvHAnJxgW91vpI0ob9A,937
83
- lets_plot/plot/theme_.py,sha256=kfqvh0reW3eAvNxBcDsLEoJAJE4LNP9Ec5suMwTHd38,39213
84
- lets_plot/plot/theme_set.py,sha256=H36Bdiam_1rDBqO7BgJMmuabF5ilpJ8in-1Rgo0CgEM,9599
85
- lets_plot/plot/tooltip.py,sha256=okjB5LrCieLTj_dNKyHCn9NP4JDprorhOEhejT3E5DM,16499
83
+ lets_plot/plot/theme_.py,sha256=lG7wULVfVTv_-9O4T3hz6bYpv_mAb91W3iHDgAbJ9j8,39913
84
+ lets_plot/plot/theme_set.py,sha256=GPBYTvUCTsXDGEzLFbKR7P5-jH_ESEEaTHeLgdihY-Q,10374
85
+ lets_plot/plot/tooltip.py,sha256=UgzhdxYhAg3evSEhPEBpYSSSTiaWeoS5Hv7_bKpDAww,16497
86
86
  lets_plot/plot/util.py,sha256=mQ4baL6-V9KCG_rJryZngTbg3xtI4kQX1aVgkovfyBU,10723
87
- lets_plot-4.7.2rc1.dist-info/licenses/LICENSE,sha256=D7RdUBHyt0ua4vSZs8H7-HIcliPTSk9zY3sNzx8fejY,1087
88
- lets_plot-4.7.2rc1.dist-info/licenses/licenses/LICENSE.FreeType,sha256=9X50Ww1fKFo_ZybMzdzAUSj_WDVNF-OkAxbWfCuUkWI,6884
89
- lets_plot-4.7.2rc1.dist-info/licenses/licenses/LICENSE.ImageMagick,sha256=Qtl-X4kle2sZStOH9HmPd7mp0EeMWOpse9JYMAEUbco,12683
90
- lets_plot-4.7.2rc1.dist-info/licenses/licenses/LICENSE.expat,sha256=Qx3QfqH_znueUlAUu_kjAG8SnuKO9c3_wEj44-s5GRw,1165
91
- lets_plot-4.7.2rc1.dist-info/licenses/licenses/LICENSE.fontconfig,sha256=xq6T3fQdG_kYW4hDWk1-2trKYQG0rb5AIlCqITF4Dmw,8816
92
- lets_plot-4.7.2rc1.dist-info/METADATA,sha256=nseC9xsf6rrB5ktlIDYKX8Ttl9p9A5Lph68STdbPtEU,13149
93
- lets_plot-4.7.2rc1.dist-info/WHEEL,sha256=XkFE14KmFh7mutkkb-qn_ueuH2lwfT8rLdfc5xpQ7wE,99
94
- lets_plot-4.7.2rc1.dist-info/top_level.txt,sha256=ID-ORXUWN-oVZmD4YFy1rQVm2QT1D-MlGON3vdxqgpY,34
95
- lets_plot-4.7.2rc1.dist-info/RECORD,,
87
+ lets_plot-4.8.0rc1.dist-info/licenses/LICENSE,sha256=D7RdUBHyt0ua4vSZs8H7-HIcliPTSk9zY3sNzx8fejY,1087
88
+ lets_plot-4.8.0rc1.dist-info/licenses/licenses/LICENSE.FreeType,sha256=9X50Ww1fKFo_ZybMzdzAUSj_WDVNF-OkAxbWfCuUkWI,6884
89
+ lets_plot-4.8.0rc1.dist-info/licenses/licenses/LICENSE.ImageMagick,sha256=Qtl-X4kle2sZStOH9HmPd7mp0EeMWOpse9JYMAEUbco,12683
90
+ lets_plot-4.8.0rc1.dist-info/licenses/licenses/LICENSE.expat,sha256=Qx3QfqH_znueUlAUu_kjAG8SnuKO9c3_wEj44-s5GRw,1165
91
+ lets_plot-4.8.0rc1.dist-info/licenses/licenses/LICENSE.fontconfig,sha256=xq6T3fQdG_kYW4hDWk1-2trKYQG0rb5AIlCqITF4Dmw,8816
92
+ lets_plot-4.8.0rc1.dist-info/METADATA,sha256=tTtnTiaNIviaBc8ANtdUZGI0bOTarbdX-SjhbTv59FM,13291
93
+ lets_plot-4.8.0rc1.dist-info/WHEEL,sha256=XkFE14KmFh7mutkkb-qn_ueuH2lwfT8rLdfc5xpQ7wE,99
94
+ lets_plot-4.8.0rc1.dist-info/top_level.txt,sha256=ID-ORXUWN-oVZmD4YFy1rQVm2QT1D-MlGON3vdxqgpY,34
95
+ lets_plot-4.8.0rc1.dist-info/RECORD,,
Binary file