lets-plot 4.6.0rc1__cp311-cp311-macosx_11_0_arm64.whl → 4.6.2__cp311-cp311-macosx_11_0_arm64.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.

lets_plot/plot/geom.py CHANGED
@@ -939,8 +939,8 @@ def geom_histogram(mapping=None, *, data=None, stat=None, position=None, show_le
939
939
  Result of the call to the `sampling_xxx()` function.
940
940
  To prevent any sampling for this layer pass value "none" (string "none").
941
941
  threshold : float, default=None
942
- If a bin's `..count..` is less than the threshold, the bin will be removed.
943
- Dropping empty bins is particularly useful for faceted plots with free scales.
942
+ If a bin's `..count..` is less than the threshold, it will be removed, but only if it is on the left or right edge of the histogram.
943
+ Dropping empty edge bins is particularly useful for faceted plots with free scales.
944
944
  tooltips : `layer_tooltips`
945
945
  Result of the call to the `layer_tooltips()` function.
946
946
  Specify appearance, style and content.
@@ -1466,23 +1466,23 @@ def geom_hex(mapping=None, *, data=None, stat=None, position=None, show_legend=N
1466
1466
  Override `bins`. The default is to use bin widths that cover the entire range of the data.
1467
1467
  drop : bool, default=True
1468
1468
  Specify whether to remove all hexagonal bins with 0 counts.
1469
- width_unit : {'res', 'identity', 'size', 'px'}, default='identity'
1469
+ width_unit : {'res', 'identity', 'size', 'px'}, default='res'
1470
1470
  Unit for width of the hexagon.
1471
1471
  Possible values:
1472
1472
 
1473
- - 'res': value 1 corresponds to the resolution along the x-axis, i.e. the minimum distance between data points;
1474
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the x-axis;
1475
- - 'size': value 1 corresponds to the diameter of a point of size 1;
1476
- - 'px': value 1 corresponds to 1 pixel.
1473
+ - 'res': if `stat='binhex'`, the unit equals the hexagonal bin width (`binwidth[0]`); otherwise, it represents the smallest distance between adjacent hexagons along the corresponding axis;
1474
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
1475
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
1476
+ - 'px': the unit is measured in screen pixels.
1477
1477
 
1478
- height_unit : {'res', 'identity', 'size', 'px'}, default='identity'
1478
+ height_unit : {'res', 'identity', 'size', 'px'}, default='res'
1479
1479
  Unit for height of the hexagon.
1480
1480
  Possible values:
1481
1481
 
1482
- - 'res': value 1 corresponds to the resolution along the y-axis, i.e. the minimum distance between data points;
1483
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the y-axis;
1484
- - 'size': value 1 corresponds to the diameter of a point of size 1;
1485
- - 'px': value 1 corresponds to 1 pixel.
1482
+ - 'res': if `stat='binhex'`, the unit equals the hexagonal bin height (`binwidth[1]`); otherwise, it represents the smallest distance between adjacent hexagons along the corresponding axis;
1483
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
1484
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
1485
+ - 'px': the unit is measured in screen pixels.
1486
1486
 
1487
1487
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
1488
1488
  Define the color aesthetic for the geometry.
@@ -1581,6 +1581,21 @@ def geom_hex(mapping=None, *, data=None, stat=None, position=None, show_legend=N
1581
1581
  fill='darkgreen') + \\
1582
1582
  ggsize(600, 450)
1583
1583
 
1584
+ |
1585
+
1586
+ .. jupyter-execute::
1587
+ :linenos:
1588
+ :emphasize-lines: 7-8
1589
+
1590
+ import numpy as np
1591
+ from lets_plot import *
1592
+ LetsPlot.setup_html()
1593
+ np.random.seed(42)
1594
+ x, y = np.random.multivariate_normal(mean=[-98, 39], cov=[[100, 0], [0, 10]], size=100).T
1595
+ ggplot() + geom_livemap() + \\
1596
+ geom_hex(aes(x, y, fill='..density..'), \\
1597
+ bins=[10, 5], alpha=.5, show_legend=False)
1598
+
1584
1599
  """
1585
1600
  return _geom('hex',
1586
1601
  mapping=mapping,
@@ -1642,19 +1657,19 @@ def geom_tile(mapping=None, *, data=None, stat=None, position=None, show_legend=
1642
1657
  Unit for width of the tile.
1643
1658
  Possible values:
1644
1659
 
1645
- - 'res': value 1 corresponds to the resolution along the x-axis, i.e. the minimum distance between data points;
1646
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the x-axis;
1647
- - 'size': value 1 corresponds to the diameter of a point of size 1;
1648
- - 'px': value 1 corresponds to 1 pixel.
1660
+ - 'res': the unit equals the smallest distance between adjacent tiles along the corresponding axis;
1661
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
1662
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
1663
+ - 'px': the unit is measured in screen pixels.
1649
1664
 
1650
1665
  height_unit : {'res', 'identity', 'size', 'px'}, default='res'
1651
1666
  Unit for height of the tile.
1652
1667
  Possible values:
1653
1668
 
1654
- - 'res': value 1 corresponds to the resolution along the y-axis, i.e. the minimum distance between data points;
1655
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the y-axis;
1656
- - 'size': value 1 corresponds to the diameter of a point of size 1;
1657
- - 'px': value 1 corresponds to 1 pixel.
1669
+ - 'res': the unit equals the smallest distance between adjacent tiles along the corresponding axis;
1670
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
1671
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
1672
+ - 'px': the unit is measured in screen pixels.
1658
1673
 
1659
1674
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
1660
1675
  Define the color aesthetic for the geometry.
@@ -1871,7 +1886,7 @@ def geom_raster(mapping=None, *, data=None, stat=None, position=None, show_legen
1871
1886
  def geom_errorbar(mapping=None, *, data=None, stat=None, position=None, show_legend=None, inherit_aes=None,
1872
1887
  manual_key=None,
1873
1888
  sampling=None, tooltips=None,
1874
- width_unit=None, height_unit=None,
1889
+ width_unit=None,
1875
1890
  color_by=None,
1876
1891
  **other_args):
1877
1892
  """
@@ -1912,22 +1927,13 @@ def geom_errorbar(mapping=None, *, data=None, stat=None, position=None, show_leg
1912
1927
  Specify appearance, style and content.
1913
1928
  Set tooltips='none' to hide tooltips from the layer.
1914
1929
  width_unit : {'res', 'identity', 'size', 'px'}, default='res'
1915
- Unit for the whisker width of the vertical error bar.
1930
+ Unit for the whisker width of the error bar.
1916
1931
  Possible values:
1917
1932
 
1918
- - 'res': value 1 corresponds to the resolution along the x-axis, i.e. the minimum distance between data points;
1919
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the x-axis;
1920
- - 'size': value 1 corresponds to the diameter of a point of size 1;
1921
- - 'px': value 1 corresponds to 1 pixel.
1922
-
1923
- height_unit : {'res', 'identity', 'size', 'px'}, default='res'
1924
- Unit for the whisker height of the horizontal error bar.
1925
- Possible values:
1926
-
1927
- - 'res': value 1 corresponds to the resolution along the y-axis, i.e. the minimum distance between data points;
1928
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the y-axis;
1929
- - 'size': value 1 corresponds to the diameter of a point of size 1;
1930
- - 'px': value 1 corresponds to 1 pixel.
1933
+ - 'res': the unit equals the smallest distance between adjacent error bars along the corresponding axis;
1934
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
1935
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
1936
+ - 'px': the unit is measured in screen pixels.
1931
1937
 
1932
1938
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
1933
1939
  Define the color aesthetic for the geometry.
@@ -1955,7 +1961,7 @@ def geom_errorbar(mapping=None, *, data=None, stat=None, position=None, show_leg
1955
1961
  - alpha : transparency level of a layer. Accept values between 0 and 1.
1956
1962
  - color (colour) : color of the geometry lines. For more info see `Color and Fill <https://lets-plot.org/python/pages/aesthetics.html#color-and-fill>`__.
1957
1963
  - size : line width. Define bar line width.
1958
- - width or height : size of the whiskers of vertical or horizontal bar, respectively. Typically range between 0 and 1. Values that are greater than 1 lead to overlapping of the bars.
1964
+ - width : size of the whiskers of error bar. Typically range between 0 and 1. Values that are greater than 1 lead to overlapping of the bars.
1959
1965
  - linetype : type of the line. Accept codes or names (0 = 'blank', 1 = 'solid', 2 = 'dashed', 3 = 'dotted', 4 = 'dotdash', 5 = 'longdash', 6 = 'twodash'), a hex string (up to 8 digits for dash-gap lengths), or a list pattern [offset, [dash, gap, ...]] / [dash, gap, ...]. For more info see `Line Types <https://lets-plot.org/python/pages/aesthetics.html#line-types>`__.
1960
1966
 
1961
1967
  ----
@@ -2017,9 +2023,22 @@ def geom_errorbar(mapping=None, *, data=None, stat=None, position=None, show_leg
2017
2023
  'c': ['gr1', 'gr2', 'gr1', 'gr2']
2018
2024
  }
2019
2025
  ggplot(data) + \\
2020
- geom_errorbar(aes(y='y', xmin='xmin', xmax='xmax', color='c'), height=0.1, size=2)
2026
+ geom_errorbar(aes(y='y', xmin='xmin', xmax='xmax', color='c'), width=0.1, size=2)
2021
2027
 
2022
2028
  """
2029
+ if mapping is not None and 'height' in mapping.props():
2030
+ print("WARN: using 'height' aesthetic parameter for errorbar was deprecated.\n"
2031
+ " Please, use 'width' aesthetic instead.")
2032
+ mapping.props()['width'] = mapping.props().pop('height')
2033
+ if 'height' in other_args:
2034
+ print("WARN: using 'height' parameter for errorbar was deprecated.\n"
2035
+ " Please, use 'width' parameter instead.")
2036
+ other_args['width'] = other_args.pop('height')
2037
+ if 'height_unit' in other_args:
2038
+ print("WARN: using 'height_unit' parameter for errorbar was deprecated.\n"
2039
+ " Please, use 'width_unit' parameter instead.")
2040
+ other_args.pop('height_unit')
2041
+
2023
2042
  return _geom('errorbar',
2024
2043
  mapping=mapping,
2025
2044
  data=data,
@@ -2031,7 +2050,6 @@ def geom_errorbar(mapping=None, *, data=None, stat=None, position=None, show_leg
2031
2050
  sampling=sampling,
2032
2051
  tooltips=tooltips,
2033
2052
  width_unit=width_unit,
2034
- height_unit=height_unit,
2035
2053
  color_by=color_by,
2036
2054
  **other_args)
2037
2055
 
@@ -2085,10 +2103,10 @@ def geom_crossbar(mapping=None, *, data=None, stat=None, position=None, show_leg
2085
2103
  Unit for the width of the crossbar.
2086
2104
  Possible values:
2087
2105
 
2088
- - 'res': value 1 corresponds to the resolution along the x-axis, i.e. the minimum distance between data points;
2089
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the x-axis;
2090
- - 'size': value 1 corresponds to the diameter of a point of size 1;
2091
- - 'px': value 1 corresponds to 1 pixel.
2106
+ - 'res': the unit equals the smallest distance between adjacent crossbars along the corresponding axis;
2107
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
2108
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
2109
+ - 'px': the unit is measured in screen pixels.
2092
2110
 
2093
2111
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
2094
2112
  Define the color aesthetic for the geometry.
@@ -3679,10 +3697,10 @@ def geom_boxplot(mapping=None, *, data=None, stat=None, position=None, show_lege
3679
3697
  Unit for the width of the boxplot.
3680
3698
  Possible values:
3681
3699
 
3682
- - 'res': value 1 corresponds to the resolution along the x-axis, i.e. the minimum distance between data points;
3683
- - 'identity': value 1 corresponds to the distance from 0 to 1 on the x-axis;
3684
- - 'size': value 1 corresponds to the diameter of a point of size 1;
3685
- - 'px': value 1 corresponds to 1 pixel.
3700
+ - 'res': the unit equals the smallest distance between adjacent boxes along the corresponding axis;
3701
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
3702
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
3703
+ - 'px': the unit is measured in screen pixels.
3686
3704
 
3687
3705
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
3688
3706
  Define the color aesthetic for the geometry.
@@ -6969,6 +6987,7 @@ def geom_text(mapping=None, *, data=None, stat=None, position=None, show_legend=
6969
6987
  na_text=None,
6970
6988
  nudge_x=None, nudge_y=None,
6971
6989
  size_unit=None,
6990
+ nudge_unit=None,
6972
6991
  check_overlap=None,
6973
6992
  color_by=None,
6974
6993
  **other_args):
@@ -7038,6 +7057,14 @@ def geom_text(mapping=None, *, data=None, stat=None, position=None, show_legend=
7038
7057
  size_unit : {'x', 'y'}
7039
7058
  Relate the size of the text to the length of the unit step along one of the axes.
7040
7059
  If None, no fitting is performed.
7060
+ nudge_unit : {'identity', 'size', 'px'}, default='identity'
7061
+ Units for x and y nudging.
7062
+ Possible values:
7063
+
7064
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
7065
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
7066
+ - 'px': the unit is measured in screen pixels.
7067
+
7041
7068
  check_overlap : bool, default=False
7042
7069
  If True, skip plotting text that overlaps previous text in the same layer.
7043
7070
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
@@ -7190,6 +7217,7 @@ def geom_text(mapping=None, *, data=None, stat=None, position=None, show_legend=
7190
7217
  na_text=na_text,
7191
7218
  nudge_x=nudge_x, nudge_y=nudge_y,
7192
7219
  size_unit=size_unit,
7220
+ nudge_unit=nudge_unit,
7193
7221
  check_overlap=check_overlap,
7194
7222
  color_by=color_by,
7195
7223
  **other_args)
@@ -7205,6 +7233,7 @@ def geom_label(mapping=None, *, data=None, stat=None, position=None, show_legend
7205
7233
  label_padding=None, label_r=None, label_size=None,
7206
7234
  alpha_stroke=None,
7207
7235
  size_unit=None,
7236
+ nudge_unit=None,
7208
7237
  check_overlap=None,
7209
7238
  color_by=None, fill_by=None,
7210
7239
  **other_args):
@@ -7282,6 +7311,14 @@ def geom_label(mapping=None, *, data=None, stat=None, position=None, show_legend
7282
7311
  size_unit : {'x', 'y'}
7283
7312
  Relate the size of the text label to the length of the unit step along one of the axes.
7284
7313
  If None, no fitting is performed.
7314
+ nudge_unit : {'identity', 'size', 'px'}, default='identity'
7315
+ Units for x and y nudging.
7316
+ Possible values:
7317
+
7318
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
7319
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
7320
+ - 'px': the unit is measured in screen pixels.
7321
+
7285
7322
  check_overlap : bool, default=False
7286
7323
  If True, skip plotting text that overlaps previous text in the same layer.
7287
7324
  color_by : {'fill', 'color', 'paint_a', 'paint_b', 'paint_c'}, default='color'
@@ -7442,6 +7479,7 @@ def geom_label(mapping=None, *, data=None, stat=None, position=None, show_legend
7442
7479
  label_size=label_size,
7443
7480
  alpha_stroke=alpha_stroke,
7444
7481
  size_unit=size_unit,
7482
+ nudge_unit=nudge_unit,
7445
7483
  check_overlap=check_overlap,
7446
7484
  color_by=color_by, fill_by=fill_by,
7447
7485
  **other_args)
@@ -272,33 +272,13 @@ def _prepare_tiles(tiles: Optional[Union[str, dict]]) -> Optional[dict]:
272
272
 
273
273
 
274
274
  def _warn_deprecated_tiles(tiles: Union[dict, None]):
275
- # TODO: Remove this warning in future releases.
276
-
277
275
  if tiles is None:
278
276
  maptiles_url = get_global_val(MAPTILES_URL)
279
277
  else:
280
278
  maptiles_url = tiles[MAPTILES_URL]
281
279
 
282
- if not isinstance(maptiles_url, str):
283
- return
284
- if not maptiles_url.startswith("https://cartocdn_[abc].global.ssl.fastly.net/"):
285
- return
286
- if 'base-midnight' not in maptiles_url and 'base-antique' not in maptiles_url and 'base-flatblue' not in maptiles_url:
287
- return
288
-
289
- if tiles is None:
290
- if not has_global_value(MAPTILES_ATTRIBUTION):
291
- return
292
- maptiles_attribution = get_global_val(MAPTILES_ATTRIBUTION)
293
- else:
294
- maptiles_attribution = tiles[MAPTILES_ATTRIBUTION]
295
-
296
- if not isinstance(maptiles_attribution, str):
297
- return
298
- if not maptiles_attribution.endswith('map data: <a href="https://www.openstreetmap.org/copyright">© OpenStreetMap contributors</a> <a href="https://carto.com/attributions#basemaps">© CARTO</a>, <a href="https://carto.com/attributions">© CARTO</a>'):
299
- return
300
-
301
- print(f"WARN: The tileset is no longer available and the corresponding constant will be removed in future releases.")
280
+ # Check if the current tiles should be deprecated and print a deprecation message. Otherwise, return.
281
+ return
302
282
 
303
283
 
304
284
  def _prepare_location(location: Union[str, List[float]]) -> Optional[dict]:
lets_plot/plot/ggtb_.py CHANGED
@@ -29,7 +29,6 @@ def ggtb() -> FeatureSpec:
29
29
  Limitations:
30
30
 
31
31
  - The toolbar does not work with interactive maps.
32
- - The toolbar is not compatible with GGBunch.
33
32
  - The toolbar cannot be used with plots using a polar coordinate system.
34
33
 
35
34
  Returns
lets_plot/plot/pos.py CHANGED
@@ -156,8 +156,13 @@ def position_nudge(x=None, y=None, unit=None):
156
156
  Nudging width.
157
157
  y : float
158
158
  Nudging height.
159
- unit : {'identity', 'size', 'px'}
159
+ unit : {'identity', 'size', 'px'}, default='identity'
160
160
  Units for x and y nudging.
161
+ Possible values:
162
+
163
+ - 'identity': a unit of 1 corresponds to a difference of 1 in data space;
164
+ - 'size': a unit of 1 corresponds to the diameter of a point with `size=1`;
165
+ - 'px': the unit is measured in screen pixels.
161
166
 
162
167
  Returns
163
168
  -------
lets_plot/plot/theme_.py CHANGED
@@ -601,12 +601,11 @@ def element_text(
601
601
  Can be used with values out of range, but behaviour is not specified.
602
602
  margin : number or list of numbers
603
603
  Margins around the text.
604
-
605
604
  The margin may be specified using a number or a list of numbers:
605
+
606
606
  - a number or list of one number - the same margin it applied to all four sides;
607
607
  - a list of two numbers - the first margin applies to the top and bottom, the second - to the left and right;
608
- - a list of three numbers - the first margin applies to the top, the second - to the right and left,
609
- the third - to the bottom;
608
+ - a list of three numbers - the first margin applies to the top, the second - to the right and left, the third - to the bottom;
610
609
  - a list of four numbers - the margins are applied to the top, right, bottom and left in that order.
611
610
 
612
611
  It is acceptable to use None for any side; in this case, the default side value for this element will be used.
@@ -658,8 +657,8 @@ def element_markdown(
658
657
  Text color.
659
658
  family : str
660
659
  Font family.
661
- face : str
662
- Font face ("plain", "italic", "bold", "bold_italic").
660
+ face : {'plain', 'italic', 'bold', 'bold_italic'}, default='plain'
661
+ Font face.
663
662
  size : int
664
663
  Text size in px.
665
664
  angle : float
@@ -678,12 +677,11 @@ def element_markdown(
678
677
  Can be used with values out of range, but behaviour is not specified.
679
678
  margin : number or list of numbers
680
679
  Margins around the text.
681
-
682
680
  The margin may be specified using a number or a list of numbers:
681
+
683
682
  - a number or list of one number - the same margin it applied to all four sides;
684
683
  - a list of two numbers - the first margin applies to the top and bottom, the second - to the left and right;
685
- - a list of three numbers - the first margin applies to the top, the second - to the right and left,
686
- the third - to the bottom;
684
+ - a list of three numbers - the first margin applies to the top, the second - to the right and left, the third - to the bottom;
687
685
  - a list of four numbers - the margins are applied to the top, right, bottom and left in that order.
688
686
 
689
687
  It is acceptable to use None for any side; in this case, the default side value for this element will be used.
@@ -699,15 +697,20 @@ def element_markdown(
699
697
  --------
700
698
  .. jupyter-execute::
701
699
  :linenos:
702
- :emphasize-lines: 7
700
+ :emphasize-lines: 12
703
701
 
704
- import numpy as np
705
702
  from lets_plot import *
706
703
  LetsPlot.setup_html()
707
- np.random.seed(42)
708
- data = {'x': np.random.normal(size=1000)}
709
- ggplot(data, aes(x='x')) + geom_histogram() + \\
710
- theme(axis_text=element_text(color='#cb181d', face='bold_italic', margin=[5, 10]))
704
+ ggplot() + \\
705
+ geom_blank() + \\
706
+ labs(
707
+ title='*Hello*, **world**',
708
+ subtitle='_Simple plot_',
709
+ caption='*Powered by **lets-plot***',
710
+ x='Title **X**',
711
+ y='Title **Y**'
712
+ ) + \\
713
+ theme(title=element_markdown())
711
714
 
712
715
  """
713
716
  return {'markdown': True, **locals()}
lets_plot/tilesets.py CHANGED
@@ -140,7 +140,6 @@ def _carto_tiles(tileset, cdn):
140
140
  if cdn == 'carto':
141
141
  base_url = "https://{{s}}.basemaps.cartocdn.com/rastertiles/{tileset}/{{z}}/{{x}}/{{y}}{hi_res}.png"
142
142
  elif cdn == 'fastly':
143
- # TODO: remove this branch in future releases
144
143
  base_url = "https://cartocdn_{{s}}.global.ssl.fastly.net/{tileset}/{{z}}/{{x}}/{{y}}{hi_res}.png"
145
144
  else:
146
145
  raise ValueError("Unknown carto cdn: {}. Expected 'carto' or 'fastly'.".format(cdn))
@@ -268,19 +267,85 @@ Examples
268
267
 
269
268
  CARTO_MIDNIGHT_COMMANDER, CARTO_MIDNIGHT_COMMANDER_HIRES = _carto_tiles('base-midnight', cdn='fastly')
270
269
  """
271
- The tileset is deprecated and will be removed in future releases.
270
+ CARTO tiles, midnight commander theme.
271
+
272
+ Examples
273
+ --------
274
+ .. jupyter-execute::
275
+ :linenos:
276
+ :emphasize-lines: 4
277
+
278
+ from lets_plot import *
279
+ from lets_plot import tilesets
280
+ LetsPlot.setup_html()
281
+ ggplot() + geom_livemap(tiles=tilesets.CARTO_MIDNIGHT_COMMANDER)
282
+
283
+ |
284
+
285
+ .. jupyter-execute::
286
+ :linenos:
287
+ :emphasize-lines: 4
288
+
289
+ from lets_plot import *
290
+ from lets_plot import tilesets
291
+ LetsPlot.setup_html()
292
+ ggplot() + geom_livemap(tiles=tilesets.CARTO_MIDNIGHT_COMMANDER_HIRES)
272
293
 
273
294
  """
274
295
 
275
296
  CARTO_ANTIQUE, CARTO_ANTIQUE_HIRES = _carto_tiles('base-antique', cdn='fastly')
276
297
  """
277
- The tileset is deprecated and will be removed in future releases.
298
+ CARTO tiles, antique theme.
299
+
300
+ Examples
301
+ --------
302
+ .. jupyter-execute::
303
+ :linenos:
304
+ :emphasize-lines: 4
305
+
306
+ from lets_plot import *
307
+ from lets_plot import tilesets
308
+ LetsPlot.setup_html()
309
+ ggplot() + geom_livemap(tiles=tilesets.CARTO_ANTIQUE)
310
+
311
+ |
312
+
313
+ .. jupyter-execute::
314
+ :linenos:
315
+ :emphasize-lines: 4
316
+
317
+ from lets_plot import *
318
+ from lets_plot import tilesets
319
+ LetsPlot.setup_html()
320
+ ggplot() + geom_livemap(tiles=tilesets.CARTO_ANTIQUE_HIRES)
278
321
 
279
322
  """
280
323
 
281
324
  CARTO_FLAT_BLUE, CARTO_FLAT_BLUE_HIRES = _carto_tiles('base-flatblue', cdn='fastly')
282
325
  """
283
- The tileset is deprecated and will be removed in future releases.
326
+ CARTO tiles, flat blue theme.
327
+
328
+ Examples
329
+ --------
330
+ .. jupyter-execute::
331
+ :linenos:
332
+ :emphasize-lines: 4
333
+
334
+ from lets_plot import *
335
+ from lets_plot import tilesets
336
+ LetsPlot.setup_html()
337
+ ggplot() + geom_livemap(tiles=tilesets.CARTO_FLAT_BLUE)
338
+
339
+ |
340
+
341
+ .. jupyter-execute::
342
+ :linenos:
343
+ :emphasize-lines: 4
344
+
345
+ from lets_plot import *
346
+ from lets_plot import tilesets
347
+ LetsPlot.setup_html()
348
+ ggplot() + geom_livemap(tiles=tilesets.CARTO_FLAT_BLUE_HIRES)
284
349
 
285
350
  """
286
351
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: lets-plot
3
- Version: 4.6.0rc1
3
+ Version: 4.6.2
4
4
  Summary: An open source library for statistical plotting
5
5
  Home-page: https://lets-plot.org
6
6
  Author: JetBrains
@@ -29,7 +29,7 @@ Classifier: Topic :: Scientific/Engineering :: Visualization
29
29
  Classifier: Intended Audience :: Science/Research
30
30
  Classifier: Intended Audience :: Developers
31
31
  Description-Content-Type: text/markdown
32
- License-File: ../LICENSE
32
+ License-File: LICENSE
33
33
  Requires-Dist: pypng
34
34
  Requires-Dist: palettable
35
35
  Dynamic: author
@@ -40,6 +40,7 @@ Dynamic: description-content-type
40
40
  Dynamic: home-page
41
41
  Dynamic: keywords
42
42
  Dynamic: license
43
+ Dynamic: license-file
43
44
  Dynamic: maintainer
44
45
  Dynamic: maintainer-email
45
46
  Dynamic: project-url
@@ -102,45 +103,38 @@ Also read:
102
103
  - [Scientific mode in PyCharm](https://www.jetbrains.com/help/pycharm/matplotlib-support.html)
103
104
  - [Scientific mode in IntelliJ IDEA](https://www.jetbrains.com/help/idea/matplotlib-support.html)
104
105
 
105
- ## What is new in 4.5.0
106
+ ## What is new in 4.6.0
106
107
 
107
- - #### Panning and Zooming
108
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/ggtb.png" alt="f-24g/images/ggtb.png" width="300" height="134">
108
+ - #### Markdown Support in *Title*, *Subtitle*, *Caption*, and Axis Labels
109
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/markdown.png" alt="f-25a/images/markdown.png" width="400" height="237">
109
110
 
110
- See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/interact_pan_zoom.ipynb).
111
+ See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/markdown.ipynb).
111
112
 
112
- - #### Clickable Links
113
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/lp_verse.png" alt="f-24g/images/lp_verse.png" width="400" height="270">
113
+ - #### Support for Multiline Axis Labels, Text Justification in Axis Labels
114
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/multiline_axis_labels.png" alt="f-25a/images/multiline_axis_labels.png" width="400" height="275">
114
115
 
115
- See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/interactive_links.ipynb).
116
+ See examples: [multiline axis labels](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/multiline_axis_labels.ipynb),
117
+ [axis label justification](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/axis_label_justification.ipynb),
116
118
 
117
- - #### LaTeX Support: Subscript, Superscript, Greek Letters and Special Characters
118
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/latex.png" alt="f-24g/images/latex.png" width="300" height="227">
119
+ - #### `geom_hex()` Geometry
120
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/geom_hex.png" alt="f-25a/images/geom_hex.png" width="370" height="296">
119
121
 
120
- See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/latex_support.ipynb).
122
+ See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/geom_hex.ipynb).
121
123
 
122
- > [!CAUTION]
123
- > Subscripts and superscripts are not supported in PDF and PNG exports.
124
-
125
- - #### Compact Scientific Notation Formatting
126
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/compact_exp.png" alt="f-24g/images/compact_exp.png" width="400" height="174">
124
+ - #### `ggbunch()` Function: Combining Plots with Custom Layout
125
+ It replaces the deprecated `GGBunch` class. <br/>
126
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/ggbunch_indonesia.png" alt="f-25a/images/ggbunch_indonesia.png" width="400" height="164">
127
127
 
128
- See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/superscript_exponent.ipynb).
129
-
130
- > [!CAUTION]
131
- > `pow` and `pow_full` options are not supported in PDF and PNG exports.
128
+ See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/ggbunch_indonesia.ipynb).
132
129
 
133
- - #### QQ-Plot: Marginal Distributions
134
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/gg_marins.png" alt="f-24g/images/gg_marins.png" width="400" height="249">
130
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/magnifier_inset.png" alt="f-25a/images/magnifier_inset.png" width="400" height="251">
135
131
 
136
- See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/qq_plot_marginal.ipynb).
132
+ See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/magnifier_inset.ipynb).
137
133
 
138
- - #### More Theme Settings
139
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/theme_legend_scheme.png" alt="f-24g/images/theme_legend_scheme.png" width="400" height="320">
134
+ - #### Parameters `start` and `direction` in `geom_pie()` Geometry
135
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/geom_pie_params.png" alt="f-25a/images/geom_pie_params.png" width="400" height="119">
140
136
 
141
- See examples: [legend margins](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/theme_legend_margins.ipynb),
142
- [legend key](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/theme_legend_key.ipynb),
143
- [facet strip](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-24g/theme_facet_strip_xy.ipynb).
137
+ See [example notebook](https://nbviewer.org/github/JetBrains/lets-plot/blob/master/docs/f-25a/geom_pie_params.ipynb).
144
138
 
145
139
 
146
140
  - #### And More
@@ -150,6 +144,21 @@ Also read:
150
144
 
151
145
  ## Recent Updates in the [Gallery](https://lets-plot.org/python/pages/gallery.html)
152
146
 
147
+ <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/magnifier_inset.ipynb">
148
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/magnifier_inset.png" alt="f-25a/images/magnifier_inset.png" width="128" height="128">
149
+ </a>
150
+ <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/ggbunch_indonesia.ipynb">
151
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-25a/images/ggbunch_indonesia.png" alt="f-25a/images/ggbunch_indonesia.png" width="128" height="128">
152
+ </a>
153
+ <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/theme_legend_scheme.ipynb">
154
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/theme_legend_scheme.png" alt="f-24g/images/theme_legend_scheme.png" width="128" height="128">
155
+ </a>
156
+ <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/interact_pan_zoom.ipynb">
157
+ <img src="https://github.com/JetBrains/lets-plot-docs/blob/4b9571b8af759574fa2db313a102069d8f8c7238/source/_static/images/changelog/4.5.0/interact_pan_zoom.png?raw=true" alt="images/changelog/4.5.0/interact_pan_zoom.png" width="128" height="128">
158
+ </a>
159
+ <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/lp_verse.ipynb">
160
+ <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24g/images/lp_verse.png" alt="f-24g/images/lp_verse.png" width="128" height="128">
161
+ </a>
153
162
  <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/us_unemployment.ipynb">
154
163
  <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24e/images/us_unemployment.png" alt="f-24e/images/us_unemployment.png" width="128" height="128">
155
164
  </a>
@@ -165,21 +174,7 @@ Also read:
165
174
  <a href="https://www.kaggle.com/code/alshan/japanese-volcanoes-on-map">
166
175
  <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24b/images/gal_japanese_volcanoes_on_map.png" alt="f-24b/images/gal_japanese_volcanoes_on_map.png" width="128" height="128">
167
176
  </a>
168
- <a href="https://nextjournal.com/asmirnov-horis/bbc-visual-and-data-journalism-cookbook-for-lets-plot">
169
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24a/images/gal_bbc_cookbook.png" alt="f-24a/images/gal_bbc_cookbook.png" width="128" height="128">
170
- </a>
171
- <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/palmer_penguins.ipynb">
172
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24a/images/gal_penguins.png" alt="f-24a/images/gal_penguins.png" width="128" height="128">
173
- </a>
174
- <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/periodic_table.ipynb">
175
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24a/images/gal_periodic_table.png" alt="f-24a/images/gal_periodic_table.png" width="128" height="128">
176
- </a>
177
- <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/wind_rose.ipynb">
178
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24a/images/gal_wind_rose.png" alt="f-24a/images/gal_wind_rose.png" width="128" height="128">
179
- </a>
180
- <a href="https://nbviewer.org/github/JetBrains/lets-plot-docs/blob/master/source/examples/demo/heatmap_in_polar_coord.ipynb">
181
- <img src="https://raw.githubusercontent.com/JetBrains/lets-plot/master/docs/f-24a/images/gal_polar_heatmap.png" alt="f-24a/images/gal_polar_heatmap.png" width="128" height="128">
182
- </a>
177
+
183
178
 
184
179
  ## Change Log
185
180