plotnine 0.15.0.dev2__py3-none-any.whl → 0.15.1__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.
Files changed (140) hide show
  1. plotnine/__init__.py +2 -0
  2. plotnine/_mpl/layout_manager/_engine.py +1 -1
  3. plotnine/_mpl/layout_manager/_layout_items.py +128 -83
  4. plotnine/_mpl/layout_manager/_layout_tree.py +761 -310
  5. plotnine/_mpl/layout_manager/_spaces.py +320 -103
  6. plotnine/_mpl/patches.py +70 -34
  7. plotnine/_mpl/text.py +144 -63
  8. plotnine/_mpl/utils.py +1 -1
  9. plotnine/_utils/__init__.py +50 -107
  10. plotnine/_utils/context.py +78 -2
  11. plotnine/_utils/ipython.py +35 -51
  12. plotnine/_utils/quarto.py +21 -0
  13. plotnine/_utils/yippie.py +115 -0
  14. plotnine/composition/__init__.py +11 -0
  15. plotnine/composition/_beside.py +55 -0
  16. plotnine/composition/_compose.py +471 -0
  17. plotnine/composition/_plot_spacer.py +60 -0
  18. plotnine/composition/_stack.py +55 -0
  19. plotnine/coords/coord.py +3 -3
  20. plotnine/data/__init__.py +31 -0
  21. plotnine/data/anscombe-quartet.csv +45 -0
  22. plotnine/doctools.py +4 -4
  23. plotnine/facets/facet.py +4 -4
  24. plotnine/facets/strips.py +17 -28
  25. plotnine/geoms/annotate.py +13 -13
  26. plotnine/geoms/annotation_logticks.py +7 -8
  27. plotnine/geoms/annotation_stripes.py +6 -6
  28. plotnine/geoms/geom.py +60 -27
  29. plotnine/geoms/geom_abline.py +3 -2
  30. plotnine/geoms/geom_area.py +2 -2
  31. plotnine/geoms/geom_bar.py +11 -2
  32. plotnine/geoms/geom_bin_2d.py +6 -2
  33. plotnine/geoms/geom_blank.py +0 -3
  34. plotnine/geoms/geom_boxplot.py +8 -4
  35. plotnine/geoms/geom_col.py +8 -2
  36. plotnine/geoms/geom_count.py +6 -2
  37. plotnine/geoms/geom_crossbar.py +3 -3
  38. plotnine/geoms/geom_density_2d.py +6 -2
  39. plotnine/geoms/geom_dotplot.py +2 -2
  40. plotnine/geoms/geom_errorbar.py +2 -2
  41. plotnine/geoms/geom_errorbarh.py +2 -2
  42. plotnine/geoms/geom_histogram.py +1 -1
  43. plotnine/geoms/geom_hline.py +3 -2
  44. plotnine/geoms/geom_linerange.py +2 -2
  45. plotnine/geoms/geom_map.py +5 -5
  46. plotnine/geoms/geom_path.py +11 -12
  47. plotnine/geoms/geom_point.py +4 -5
  48. plotnine/geoms/geom_pointdensity.py +4 -0
  49. plotnine/geoms/geom_pointrange.py +3 -5
  50. plotnine/geoms/geom_polygon.py +2 -3
  51. plotnine/geoms/geom_qq.py +4 -0
  52. plotnine/geoms/geom_qq_line.py +4 -0
  53. plotnine/geoms/geom_quantile.py +4 -0
  54. plotnine/geoms/geom_raster.py +4 -5
  55. plotnine/geoms/geom_rect.py +3 -4
  56. plotnine/geoms/geom_ribbon.py +7 -7
  57. plotnine/geoms/geom_rug.py +1 -1
  58. plotnine/geoms/geom_segment.py +2 -2
  59. plotnine/geoms/geom_sina.py +3 -3
  60. plotnine/geoms/geom_smooth.py +7 -3
  61. plotnine/geoms/geom_step.py +2 -2
  62. plotnine/geoms/geom_text.py +2 -3
  63. plotnine/geoms/geom_violin.py +28 -8
  64. plotnine/geoms/geom_vline.py +3 -2
  65. plotnine/ggplot.py +64 -85
  66. plotnine/guides/guide.py +7 -10
  67. plotnine/guides/guide_colorbar.py +3 -3
  68. plotnine/guides/guide_legend.py +3 -3
  69. plotnine/guides/guides.py +6 -6
  70. plotnine/helpers.py +49 -0
  71. plotnine/iapi.py +28 -5
  72. plotnine/labels.py +3 -3
  73. plotnine/layer.py +36 -19
  74. plotnine/mapping/_atomic.py +178 -0
  75. plotnine/mapping/_env.py +13 -2
  76. plotnine/mapping/_eval_environment.py +85 -0
  77. plotnine/mapping/aes.py +91 -72
  78. plotnine/mapping/evaluation.py +7 -65
  79. plotnine/scales/__init__.py +2 -0
  80. plotnine/scales/limits.py +7 -7
  81. plotnine/scales/scale.py +3 -3
  82. plotnine/scales/scale_color.py +82 -18
  83. plotnine/scales/scale_continuous.py +6 -4
  84. plotnine/scales/scale_datetime.py +28 -14
  85. plotnine/scales/scale_discrete.py +1 -1
  86. plotnine/scales/scale_identity.py +21 -2
  87. plotnine/scales/scale_manual.py +8 -2
  88. plotnine/scales/scale_xy.py +2 -2
  89. plotnine/stats/binning.py +4 -1
  90. plotnine/stats/smoothers.py +23 -36
  91. plotnine/stats/stat.py +20 -32
  92. plotnine/stats/stat_bin.py +6 -5
  93. plotnine/stats/stat_bin_2d.py +11 -9
  94. plotnine/stats/stat_bindot.py +13 -16
  95. plotnine/stats/stat_boxplot.py +6 -6
  96. plotnine/stats/stat_count.py +6 -9
  97. plotnine/stats/stat_density.py +7 -10
  98. plotnine/stats/stat_density_2d.py +12 -8
  99. plotnine/stats/stat_ecdf.py +7 -6
  100. plotnine/stats/stat_ellipse.py +9 -6
  101. plotnine/stats/stat_function.py +10 -8
  102. plotnine/stats/stat_hull.py +6 -3
  103. plotnine/stats/stat_identity.py +5 -2
  104. plotnine/stats/stat_pointdensity.py +5 -7
  105. plotnine/stats/stat_qq.py +46 -20
  106. plotnine/stats/stat_qq_line.py +16 -11
  107. plotnine/stats/stat_quantile.py +15 -9
  108. plotnine/stats/stat_sina.py +45 -14
  109. plotnine/stats/stat_smooth.py +8 -10
  110. plotnine/stats/stat_sum.py +5 -2
  111. plotnine/stats/stat_summary.py +7 -10
  112. plotnine/stats/stat_summary_bin.py +11 -14
  113. plotnine/stats/stat_unique.py +5 -2
  114. plotnine/stats/stat_ydensity.py +8 -11
  115. plotnine/themes/elements/__init__.py +2 -1
  116. plotnine/themes/elements/element_line.py +17 -9
  117. plotnine/themes/elements/margin.py +64 -1
  118. plotnine/themes/theme.py +9 -1
  119. plotnine/themes/theme_538.py +0 -1
  120. plotnine/themes/theme_bw.py +0 -1
  121. plotnine/themes/theme_dark.py +0 -1
  122. plotnine/themes/theme_gray.py +6 -5
  123. plotnine/themes/theme_light.py +1 -1
  124. plotnine/themes/theme_matplotlib.py +5 -5
  125. plotnine/themes/theme_seaborn.py +7 -4
  126. plotnine/themes/theme_void.py +9 -8
  127. plotnine/themes/theme_xkcd.py +0 -1
  128. plotnine/themes/themeable.py +110 -32
  129. plotnine/typing.py +17 -6
  130. plotnine/watermark.py +3 -3
  131. {plotnine-0.15.0.dev2.dist-info → plotnine-0.15.1.dist-info}/METADATA +13 -6
  132. plotnine-0.15.1.dist-info/RECORD +221 -0
  133. {plotnine-0.15.0.dev2.dist-info → plotnine-0.15.1.dist-info}/WHEEL +1 -1
  134. plotnine/plot_composition/__init__.py +0 -10
  135. plotnine/plot_composition/_compose.py +0 -436
  136. plotnine/plot_composition/_spacer.py +0 -32
  137. plotnine-0.15.0.dev2.dist-info/RECORD +0 -214
  138. /plotnine/{plot_composition → composition}/_plotspec.py +0 -0
  139. {plotnine-0.15.0.dev2.dist-info → plotnine-0.15.1.dist-info}/licenses/LICENSE +0 -0
  140. {plotnine-0.15.0.dev2.dist-info → plotnine-0.15.1.dist-info}/top_level.txt +0 -0
@@ -17,7 +17,7 @@ from warnings import warn
17
17
 
18
18
  import numpy as np
19
19
 
20
- from .._utils import to_rgba
20
+ from .._utils import has_alpha_channel, to_rgba
21
21
  from .._utils.registry import RegistryHierarchyMeta
22
22
  from ..exceptions import PlotnineError, deprecated_themeable_name
23
23
  from .elements import element_blank
@@ -377,6 +377,36 @@ class Themeables(dict[str, themeable]):
377
377
 
378
378
  return default
379
379
 
380
+ def get_ha(self, name: str) -> float:
381
+ """
382
+ Get the horizontal alignement of themeable as a float
383
+
384
+ The themeable should be and element_text
385
+ """
386
+ lookup = {"left": 0.0, "center": 0.5, "right": 1.0}
387
+ ha: str | float = self.getp((name, "ha"), "center")
388
+ if isinstance(ha, str):
389
+ ha = lookup[ha]
390
+ return ha
391
+
392
+ def get_va(self, name) -> float:
393
+ """
394
+ Get the vertical alignement of themeable as a float
395
+
396
+ The themeable should be and element_text
397
+ """
398
+ lookup = {
399
+ "bottom": 0.0,
400
+ "center": 0.5,
401
+ "baseline": 0.5,
402
+ "center_baseline": 0.5,
403
+ "top": 1.0,
404
+ }
405
+ va: str | float = self.getp((name, "va"), "center")
406
+ if isinstance(va, str):
407
+ va = lookup[va]
408
+ return va
409
+
380
410
  def property(self, name: str, key: str = "value") -> Any:
381
411
  """
382
412
  Get the value a specific themeable(s) property
@@ -474,6 +504,25 @@ class MixinSequenceOfValues(themeable):
474
504
  a.set(**{name: value})
475
505
 
476
506
 
507
+ def blend_alpha(
508
+ properties: dict[str, Any], key: str = "color"
509
+ ) -> dict[str, Any]:
510
+ """
511
+ Blend color with alpha
512
+
513
+ When setting color property values of matplotlib objects,
514
+ for a color with an alpha channel, we don't want the alpha
515
+ property if any to have any effect on that color.
516
+ """
517
+ if (color := properties.get(key)) is not None:
518
+ if "alpha" in properties:
519
+ properties[key] = to_rgba(color, properties["alpha"])
520
+ properties["alpha"] = None
521
+ elif has_alpha_channel(color):
522
+ properties["alpha"] = None
523
+ return properties
524
+
525
+
477
526
  # element_text themeables
478
527
 
479
528
 
@@ -729,18 +778,29 @@ class plot_tag(themeable):
729
778
 
730
779
  Notes
731
780
  -----
732
- The `ha` & `va` of element_text will only have an effect if the
733
- have no effect if the
734
- [](:class:`~plotnine.themes.themeable.plot_tag_position`)
735
- is given as x-y coordinates.
781
+ The `ha` & `va` of element_text have no effect in some cases. e.g.
782
+ if [](:class:`~plotnine.themes.themeable.plot_tag_position`) is "margin"
783
+ and the tag is at the top it cannot be vertically aligned.
784
+
785
+ Also `ha` & `va` can be floats if it makes sense to justify the tag
786
+ over a span. e.g. along the panel or plot, or when aligning with
787
+ other tags in a composition.
736
788
  """
737
789
 
738
790
  _omit = ["margin"]
739
791
 
740
792
  def apply_figure(self, figure: Figure, targets: ThemeTargets):
741
793
  super().apply_figure(figure, targets)
794
+ props = self.properties
795
+
796
+ if "va" in props and not isinstance(props["va"], str):
797
+ del props["va"]
798
+
799
+ if "ha" in props and not isinstance(props["ha"], str):
800
+ del props["ha"]
801
+
742
802
  if text := targets.plot_tag:
743
- text.set(**self.properties)
803
+ text.set(**props)
744
804
 
745
805
  def blank_figure(self, figure: Figure, targets: ThemeTargets):
746
806
  super().blank_figure(figure, targets)
@@ -811,7 +871,7 @@ class strip_text_x(MixinSequenceOfValues):
811
871
  theme_element : element_text
812
872
  """
813
873
 
814
- _omit = ["margin", "ha"]
874
+ _omit = ["margin", "ha", "va"]
815
875
 
816
876
  def apply_figure(self, figure: Figure, targets: ThemeTargets):
817
877
  super().apply_figure(figure, targets)
@@ -834,7 +894,7 @@ class strip_text_y(MixinSequenceOfValues):
834
894
  theme_element : element_text
835
895
  """
836
896
 
837
- _omit = ["margin", "va"]
897
+ _omit = ["margin", "ha", "va"]
838
898
 
839
899
  def apply_figure(self, figure: Figure, targets: ThemeTargets):
840
900
  super().apply_figure(figure, targets)
@@ -894,13 +954,28 @@ class axis_text_x(MixinSequenceOfValues):
894
954
 
895
955
  def apply_ax(self, ax: Axes):
896
956
  super().apply_ax(ax)
897
- self.set(ax.get_xticklabels())
957
+
958
+ # TODO: Remove this code when the minimum matplotlib >= 3.10.0,
959
+ # and use the commented one below it
960
+ import matplotlib as mpl
961
+ from packaging import version
962
+
963
+ vinstalled = version.parse(mpl.__version__)
964
+ v310 = version.parse("3.10.0")
965
+ name = "labelbottom" if vinstalled >= v310 else "labelleft"
966
+ if not ax.xaxis.get_tick_params()[name]:
967
+ return
968
+
969
+ # if not ax.xaxis.get_tick_params()["labelbottom"]:
970
+ # return
971
+
972
+ labels = [t.label1 for t in ax.xaxis.get_major_ticks()]
973
+ self.set(labels)
898
974
 
899
975
  def blank_ax(self, ax: Axes):
900
976
  super().blank_ax(ax)
901
- ax.xaxis.set_tick_params(
902
- which="both", labelbottom=False, labeltop=False
903
- )
977
+ for t in ax.xaxis.get_major_ticks():
978
+ t.label1.set_visible(False)
904
979
 
905
980
 
906
981
  class axis_text_y(MixinSequenceOfValues):
@@ -927,13 +1002,17 @@ class axis_text_y(MixinSequenceOfValues):
927
1002
 
928
1003
  def apply_ax(self, ax: Axes):
929
1004
  super().apply_ax(ax)
930
- self.set(ax.get_yticklabels())
1005
+
1006
+ if not ax.yaxis.get_tick_params()["labelleft"]:
1007
+ return
1008
+
1009
+ labels = [t.label1 for t in ax.yaxis.get_major_ticks()]
1010
+ self.set(labels)
931
1011
 
932
1012
  def blank_ax(self, ax: Axes):
933
1013
  super().blank_ax(ax)
934
- ax.yaxis.set_tick_params(
935
- which="both", labelleft=False, labelright=False
936
- )
1014
+ for t in ax.yaxis.get_major_ticks():
1015
+ t.label1.set_visible(False)
937
1016
 
938
1017
 
939
1018
  class axis_text(axis_text_x, axis_text_y):
@@ -1080,7 +1159,7 @@ class axis_ticks_minor_x(MixinSequenceOfValues):
1080
1159
  # to invisible. Theming should not change those artists to visible,
1081
1160
  # so we return early.
1082
1161
  params = ax.xaxis.get_tick_params(which="minor")
1083
- if not params.get("left", False):
1162
+ if not params.get("bottom", False):
1084
1163
  return
1085
1164
 
1086
1165
  # We have to use both
@@ -1306,7 +1385,7 @@ class panel_grid_major_x(themeable):
1306
1385
 
1307
1386
  def apply_ax(self, ax: Axes):
1308
1387
  super().apply_ax(ax)
1309
- ax.xaxis.grid(which="major", **self.properties)
1388
+ ax.xaxis.grid(which="major", **blend_alpha(self.properties))
1310
1389
 
1311
1390
  def blank_ax(self, ax: Axes):
1312
1391
  super().blank_ax(ax)
@@ -1324,7 +1403,7 @@ class panel_grid_major_y(themeable):
1324
1403
 
1325
1404
  def apply_ax(self, ax: Axes):
1326
1405
  super().apply_ax(ax)
1327
- ax.yaxis.grid(which="major", **self.properties)
1406
+ ax.yaxis.grid(which="major", **blend_alpha(self.properties))
1328
1407
 
1329
1408
  def blank_ax(self, ax: Axes):
1330
1409
  super().blank_ax(ax)
@@ -1448,8 +1527,13 @@ class legend_key(MixinSequenceOfValues):
1448
1527
  def apply_figure(self, figure: Figure, targets: ThemeTargets):
1449
1528
  super().apply_figure(figure, targets)
1450
1529
  properties = self.properties
1530
+ edgecolor = properties.get("edgecolor", None)
1531
+
1532
+ if isinstance(self, rect) and edgecolor:
1533
+ del properties["edgecolor"]
1534
+
1451
1535
  # Prevent invisible strokes from having any effect
1452
- if properties.get("edgecolor") in ("none", "None"):
1536
+ if edgecolor in ("none", "None"):
1453
1537
  properties["linewidth"] = 0
1454
1538
 
1455
1539
  rects = [da.patch for da in targets.legend_key]
@@ -1533,7 +1617,7 @@ class legend_box_background(themeable):
1533
1617
  """
1534
1618
 
1535
1619
 
1536
- class panel_background(themeable):
1620
+ class panel_background(legend_key):
1537
1621
  """
1538
1622
  Panel background
1539
1623
 
@@ -1542,13 +1626,12 @@ class panel_background(themeable):
1542
1626
  theme_element : element_rect
1543
1627
  """
1544
1628
 
1629
+ def apply_figure(self, figure: Figure, targets: ThemeTargets):
1630
+ super().apply_figure(figure, targets)
1631
+
1545
1632
  def apply_ax(self, ax: Axes):
1546
1633
  super().apply_ax(ax)
1547
- d = self.properties
1548
- if "facecolor" in d and "alpha" in d:
1549
- d["facecolor"] = to_rgba(d["facecolor"], d["alpha"])
1550
- del d["alpha"]
1551
-
1634
+ d = blend_alpha(self.properties, "facecolor")
1552
1635
  d["edgecolor"] = "none"
1553
1636
  d["linewidth"] = 0
1554
1637
  ax.patch.set(**d)
@@ -1574,16 +1657,12 @@ class panel_border(MixinSequenceOfValues):
1574
1657
  if not (rects := targets.panel_border):
1575
1658
  return
1576
1659
 
1577
- d = self.properties
1660
+ d = blend_alpha(self.properties, "edgecolor")
1578
1661
 
1579
1662
  with suppress(KeyError):
1580
1663
  if d["edgecolor"] == "none" or d["size"] == 0:
1581
1664
  return
1582
1665
 
1583
- if "edgecolor" in d and "alpha" in d:
1584
- d["edgecolor"] = to_rgba(d["edgecolor"], d["alpha"])
1585
- del d["alpha"]
1586
-
1587
1666
  self.set(rects, d)
1588
1667
 
1589
1668
  def blank_figure(self, figure: Figure, targets: ThemeTargets):
@@ -1663,7 +1742,6 @@ class strip_background(strip_background_x, strip_background_y):
1663
1742
 
1664
1743
 
1665
1744
  class rect(
1666
- legend_key,
1667
1745
  legend_frame,
1668
1746
  legend_background,
1669
1747
  panel_background,
plotnine/typing.py CHANGED
@@ -1,14 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
- import sys
4
- from datetime import datetime, timedelta
5
3
  from typing import (
6
- TYPE_CHECKING,
7
4
  Any,
8
5
  Callable,
9
6
  Literal,
7
+ NotRequired,
10
8
  Protocol,
11
9
  Sequence,
10
+ TypedDict,
12
11
  TypeVar,
13
12
  )
14
13
 
@@ -80,7 +79,7 @@ FacetSpaceRatios: TypeAlias = dict[Literal["x", "y"], Sequence[float]]
80
79
 
81
80
  StripPosition: TypeAlias = Literal["top", "right"]
82
81
 
83
- ## Scales
82
+ # Scales
84
83
 
85
84
  # Name names of scaled aesthetics
86
85
  ScaledAestheticsName: TypeAlias = Literal[
@@ -110,11 +109,11 @@ ScaledAestheticsName: TypeAlias = Literal[
110
109
  "upper",
111
110
  ]
112
111
 
113
- ## Coords
112
+ # Coords
114
113
  CoordRange: TypeAlias = tuple[float, float]
115
114
 
116
115
  # Guide
117
- SidePosition: TypeAlias = Literal["left", "right", "top", "bottom"]
116
+ Side: TypeAlias = Literal["left", "right", "top", "bottom"]
118
117
  LegendPosition: TypeAlias = (
119
118
  Literal["left", "right", "top", "bottom", "inside"] | tuple[float, float]
120
119
  )
@@ -142,3 +141,15 @@ class PTransform(Protocol):
142
141
  """
143
142
 
144
143
  def __call__(self, x: TFloatArrayLike) -> TFloatArrayLike: ...
144
+
145
+
146
+ class DisplayMetadata(TypedDict):
147
+ """
148
+ Metadata for the IPython output
149
+ """
150
+
151
+ width: NotRequired[int]
152
+ height: NotRequired[int]
153
+
154
+
155
+ MimeBundle: TypeAlias = tuple[dict[str, bytes], dict[str, DisplayMetadata]]
plotnine/watermark.py CHANGED
@@ -50,12 +50,12 @@ class watermark:
50
50
  kwargs["zorder"] = 99.9
51
51
  self.kwargs = kwargs
52
52
 
53
- def __radd__(self, plot: p9.ggplot) -> p9.ggplot:
53
+ def __radd__(self, other: p9.ggplot) -> p9.ggplot:
54
54
  """
55
55
  Add watermark to ggplot object
56
56
  """
57
- plot.watermarks.append(self)
58
- return plot
57
+ other.watermarks.append(self)
58
+ return other
59
59
 
60
60
  def draw(self, figure: matplotlib.figure.Figure):
61
61
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plotnine
3
- Version: 0.15.0.dev2
3
+ Version: 0.15.1
4
4
  Summary: A Grammar of Graphics for Python
5
5
  Author-email: Hassan Kibirige <has2k1@gmail.com>
6
6
  License: The MIT License (MIT)
@@ -46,10 +46,10 @@ Description-Content-Type: text/markdown
46
46
  License-File: LICENSE
47
47
  Requires-Dist: matplotlib>=3.8.0
48
48
  Requires-Dist: pandas>=2.2.0
49
- Requires-Dist: mizani~=0.13.0
49
+ Requires-Dist: mizani~=0.14.0
50
50
  Requires-Dist: numpy>=1.23.5
51
51
  Requires-Dist: scipy>=1.8.0
52
- Requires-Dist: statsmodels>=0.14.0
52
+ Requires-Dist: statsmodels>=0.14.5
53
53
  Provides-Extra: all
54
54
  Requires-Dist: plotnine[extra]; extra == "all"
55
55
  Requires-Dist: plotnine[doc]; extra == "all"
@@ -60,11 +60,13 @@ Requires-Dist: plotnine[dev]; extra == "all"
60
60
  Provides-Extra: extra
61
61
  Requires-Dist: adjustText>=1.2.0; extra == "extra"
62
62
  Requires-Dist: geopandas>=1.0.0; extra == "extra"
63
- Requires-Dist: scikit-learn>1.2.0; extra == "extra"
63
+ Requires-Dist: geodatasets>=2024.8.0; extra == "extra"
64
+ Requires-Dist: scikit-learn>=1.3.0; extra == "extra"
64
65
  Requires-Dist: scikit-misc>=0.5.1; extra == "extra"
66
+ Requires-Dist: polars>=1.24.0; extra == "extra"
67
+ Requires-Dist: pyarrow>=19.0.1; extra == "extra"
65
68
  Provides-Extra: doc
66
69
  Requires-Dist: jupyter; extra == "doc"
67
- Requires-Dist: nbsphinx; extra == "doc"
68
70
  Requires-Dist: click; extra == "doc"
69
71
  Requires-Dist: numpydoc>=0.9.1; extra == "doc"
70
72
  Requires-Dist: quartodoc>=0.7.2; extra == "doc"
@@ -80,7 +82,7 @@ Requires-Dist: twine; extra == "dev"
80
82
  Requires-Dist: plotnine[typing]; extra == "dev"
81
83
  Requires-Dist: pre-commit; extra == "dev"
82
84
  Provides-Extra: typing
83
- Requires-Dist: pyright==1.1.396; extra == "typing"
85
+ Requires-Dist: pyright==1.1.404; extra == "typing"
84
86
  Requires-Dist: ipython; extra == "typing"
85
87
  Requires-Dist: pandas-stubs; extra == "typing"
86
88
  Dynamic: license-file
@@ -214,6 +216,11 @@ $ pip install 'plotnine[all]' # 6. everything
214
216
 
215
217
  # Or using conda
216
218
  $ conda install -c conda-forge plotnine
219
+
220
+ # Or using pixi
221
+ $ pixi init name-of-my-project
222
+ $ cd name-of-my-project
223
+ $ pixi add python plotnine
217
224
  ```
218
225
 
219
226
  Development version
@@ -0,0 +1,221 @@
1
+ plotnine/__init__.py,sha256=_Q18ZKrippC4L27KdYUhuJon95AE8JPZXEYeXZyutms,10372
2
+ plotnine/animation.py,sha256=izJZ4Gy0cBHEBc8ehofsWSWOzZW8UEroy1Uvw86Igb0,7521
3
+ plotnine/doctools.py,sha256=JBF55q1MX2fXYQcGDpVrGPdlKf5OiQ5gyTdWhnM_IzU,14558
4
+ plotnine/exceptions.py,sha256=SgTxBHkV65HjGI3aFy2q1_lHP9HAdiuxVLN3U-PJWSQ,1616
5
+ plotnine/ggplot.py,sha256=Ns8VURuRXNCWMF2OZcaN3rezw-i-Ceq5YTb-AUB3rJs,24286
6
+ plotnine/helpers.py,sha256=4R3KZmtGH46-kRNSGOA0JxZaLKBo0ge8Vnx1cDQ8_gI,966
7
+ plotnine/iapi.py,sha256=jNLmUSoh5g9kNdhOoXSqNcqOdd2-6xdWAmst-YGU41U,9095
8
+ plotnine/labels.py,sha256=3pOXth2Xma_qCqB_xXAGIkPQ9gcaUaaFEAsa5if1iR0,2830
9
+ plotnine/layer.py,sha256=l9ehqvWoDpaZdVFLGoiA5USL79NYWWaiZM_ZuDeGzpo,17294
10
+ plotnine/options.py,sha256=j3zXv4wc3J4nOI_TqJ5s_abuifodt_UN8MR8M4i8UVA,3108
11
+ plotnine/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ plotnine/qplot.py,sha256=BSAb4u5I7PaPGofkAgx7brdCNTjMZvC_TDGHVUZ35xM,7384
13
+ plotnine/typing.py,sha256=rcU2mkm-kdUMPaI4g7f1K9Ru6lXed8rrCPZxQD2_YI0,3976
14
+ plotnine/watermark.py,sha256=JJnqNynytg7dzu88jX4OymnyhY-kmSj62gFTOoqXrhM,1509
15
+ plotnine/_mpl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ plotnine/_mpl/gridspec.py,sha256=OvlXchYXam1c1n8iNPKu4fJr6rqmH7OWebhJX5qqOmY,7903
17
+ plotnine/_mpl/offsetbox.py,sha256=E7810lS9W7Gexwz5mkSMz7PQXXHkYX-WHKlPHqapmTg,3216
18
+ plotnine/_mpl/patches.py,sha256=rYWAZHhTGi1B_dFfVI9JsrYgioum7aQjGwpNh1Q0tKg,3838
19
+ plotnine/_mpl/text.py,sha256=HpTcdSCXOFGdW8Yz5Go-6KRP6FoNNmWMB85vmbBqKnQ,6571
20
+ plotnine/_mpl/ticker.py,sha256=RY_7AdTggc7QBq9_t0KBJXg36oxKfB-Vtc9FzLnaGnQ,393
21
+ plotnine/_mpl/transforms.py,sha256=DNaOlNq76xlT696sN8ot1bmYyp4mmrjXQHk3kTi4HIg,76
22
+ plotnine/_mpl/utils.py,sha256=0GY3CWWXZiNHe333v9GAquRe5naO54JeiPt67-UvVYw,4147
23
+ plotnine/_mpl/layout_manager/__init__.py,sha256=IXpPF5Oycc45uFpK4MJ6kcQCe1u5VUfnHLNZGcnrJCg,157
24
+ plotnine/_mpl/layout_manager/_engine.py,sha256=yOAEyv2n5KGt_oD8LYTS1GKJKczsNuWloGrscIblIjc,2804
25
+ plotnine/_mpl/layout_manager/_layout_items.py,sha256=QikIoiYKDDfy2mrX9rZUIqD7Cy0ihfOyZHEs1ajF4CA,29710
26
+ plotnine/_mpl/layout_manager/_layout_tree.py,sha256=xJTPkhKcOY21qOBfFrxuDr1Xu5_kmgiIqReVLCf5Lyo,32065
27
+ plotnine/_mpl/layout_manager/_spaces.py,sha256=5gSfYSoymH5prauGq1h9MZG4IlBbzd0-cSaS5RedMyU,38290
28
+ plotnine/_utils/__init__.py,sha256=3tcSTng6Mtk1o6NPEikALHKD3ZGuAYofjQJREHX84a4,30992
29
+ plotnine/_utils/context.py,sha256=FLKPhltYqkZRvzufG2WxXV0sMnZxNXqqZyb3nrnsFyY,3906
30
+ plotnine/_utils/dev.py,sha256=0qgRbMhcd4dfuLuYxx0skocKAtfwHF02ntyILRBogbg,1629
31
+ plotnine/_utils/ipython.py,sha256=r5JfBCO9BEqXHoP5JGxxYdGTj5zuLNs44kdLhTz5o2o,1684
32
+ plotnine/_utils/quarto.py,sha256=oHYZ2p5G5i-72fx7WCBBtxa_1uXVx9_NvTBoB4TS46A,1541
33
+ plotnine/_utils/registry.py,sha256=HoiB2NnbEHufXjYnVJyrJKflk2RwKtTYk2L3n7tH4XA,3321
34
+ plotnine/_utils/yippie.py,sha256=DbmxvVrd34P24CCmOZrAulyGQ35rXNaSr8BuutS2Uio,2392
35
+ plotnine/composition/__init__.py,sha256=yJSYKBDmHw9viTijLRaczD3LNpjOtx9nRGPg3PNIvpA,198
36
+ plotnine/composition/_beside.py,sha256=Y7RVwYZAZClH1E206kS0BLcxaSvBtZG1ds6bR5Dj-PY,1275
37
+ plotnine/composition/_compose.py,sha256=t5fFl81d3fpIiz2yioJJ64xCZihmP9M5ICUeKNCNoIE,13322
38
+ plotnine/composition/_plot_spacer.py,sha256=Fm3kxOtV1R8EMqBDbBKs6WArWVg144-fixWvDoOFFOg,1806
39
+ plotnine/composition/_plotspec.py,sha256=0F7q7PjDMDqcallpnBdX3N2iSRjdBTyjSvMFf83uvPU,1015
40
+ plotnine/composition/_stack.py,sha256=K7IY2Xz3PkRM2bTnfj_-t0BpMbzxitypoNdAchQbgMw,1292
41
+ plotnine/coords/__init__.py,sha256=inM-9JwSPvYLlOy6opye0YV2EGWsI4708wGKdHvQvVM,301
42
+ plotnine/coords/coord.py,sha256=Yu2xj4BqFBWlS0XHNDa6h8Dek0_PA6Lssv3M9EneSB8,6883
43
+ plotnine/coords/coord_cartesian.py,sha256=vGeSFe9UyycUkbjdjoPNSQJwnnU7fEmsk0nl_oBvzxY,3038
44
+ plotnine/coords/coord_fixed.py,sha256=C9aIy28GQHE4XJQ3I1LhnHviUmhBia7dk64eBVNftLw,1763
45
+ plotnine/coords/coord_flip.py,sha256=lskU4t72pMmtWL16slw3CV8bLPfTNONCmO_A1d0g5Rs,2891
46
+ plotnine/coords/coord_trans.py,sha256=g6Scq9q_78bHBV6McHMQfFM4KPBVcz9bjpnNx7eMyz0,4750
47
+ plotnine/data/__init__.py,sha256=RBpXrBruEvTmtkDVPAZOhs6AK_BQpUXuC0Gu33c9lbc,22303
48
+ plotnine/data/anscombe-quartet.csv,sha256=7Lu2MgXHbr5-iGSlBEcRWKBK6F_49pUzeiOqfzPk5Ws,468
49
+ plotnine/data/diamonds.csv,sha256=lXRzCwOrokHYmcSpdRHFBhsZNY-riVEHdPtsJBaDRcQ,2772143
50
+ plotnine/data/economics.csv,sha256=cWSbwFV6yqb7jYiKrwSCY-rz43icVHwQ_7fVXGksQeM,21860
51
+ plotnine/data/economics_long.csv,sha256=ukh3n2MqY_rPEeNYy1PgryqJZfeS2AEKjSddnVJ0rdg,123339
52
+ plotnine/data/faithful.csv,sha256=Xfz0Idy0fV62rkE7nRnO6cRn0NhRrWaWy4ovnGEdZ60,2470
53
+ plotnine/data/faithfuld.csv,sha256=U2LleBDYmogQb_kDeil2v__YHUCubh8bgzFjyrOdIg4,298297
54
+ plotnine/data/huron.csv,sha256=Sl2-tTPUj4rNEgm8qfF3UIquLAEjQaWShYgv8_gDYLk,1678
55
+ plotnine/data/luv_colours.csv,sha256=L-c3aEHMJPZNcdDKqqU0b90W5FM4UtbEe-Np29LOKRQ,39004
56
+ plotnine/data/meat.csv,sha256=tYfB51iuQ9h_6G-sDvxz2kCq6vQEbro3D3D87VVFZKU,46284
57
+ plotnine/data/midwest.csv,sha256=FOhp7_w4R-gHqCZJlM5c59-RNbiV07WaIt881IKPt0A,98022
58
+ plotnine/data/mpg.csv,sha256=FpX7FxpCJOxfkCZS9ghMRr1Sisv1Anj4O6gQTON0Mzw,16046
59
+ plotnine/data/msleep.csv,sha256=Cm5ArhLjOFXbU5Ubo3slSyZgv36TCjMECQY9L9dY2GM,6773
60
+ plotnine/data/mtcars.csv,sha256=CnukZ_Qy9KxNmHb_RBhBj4J5WefTIWNMBmr-PQqxkaQ,1787
61
+ plotnine/data/pageviews.csv,sha256=Ydz7c4NO6AqLqJOxR2_9y2QRFtRV0q2xvSUby6siwTk,13559
62
+ plotnine/data/penguins.csv,sha256=GGendqgzed9CGfInux7_uWfaEq2xNzISfIyNEgQ0wps,15203
63
+ plotnine/data/presidential.csv,sha256=jkUSy3wUSYpo1Vdj90U8ivSE1TLL_ztxvtqIVa7C1Wc,511
64
+ plotnine/data/seals.csv,sha256=VEuSEBLz3Fj14eBdM6hp6M6GpH2lqN5ekT_d2Mk1rK0,57035
65
+ plotnine/data/txhousing.csv,sha256=RdHoH5W9bud_DzsefIc8yNOFaxMl6IDDKMiP68aoIoY,523993
66
+ plotnine/facets/__init__.py,sha256=9P2MBA8MF1cRpk7YRQUcYN2UY7kZ9qrZc_0Qm9SRguk,393
67
+ plotnine/facets/facet.py,sha256=zPzRMC6gupDW06vuD_WsNdtCE5QgUnXuNMuXXyuwfx0,18190
68
+ plotnine/facets/facet_grid.py,sha256=sK50Syzt2sy5aE3hObBC4TdQwCwyY-EtDUK2_B6aDnM,11755
69
+ plotnine/facets/facet_null.py,sha256=J--RdOvFP7AE0jK79-LNRksvCJExQTpS-tU5i0pGqs8,749
70
+ plotnine/facets/facet_wrap.py,sha256=NOoNdkaSb1y_ho6UygGkDih7zlQYXcEgJYK0Lqu6e98,8805
71
+ plotnine/facets/labelling.py,sha256=JEuwERTK0IfmxTWHbl2nsGgxZ6xi0n2TTWT4_OSfQcQ,8833
72
+ plotnine/facets/layout.py,sha256=TIkMChA0wJWLKN31PH0czS6CN4pw3o--PF49LakJ2h4,8967
73
+ plotnine/facets/strips.py,sha256=-SWFaxqdzn-dnjx_Hxkuwd3kO-u_yreMLcMurm_IHqU,5688
74
+ plotnine/geoms/__init__.py,sha256=HEfhNmmNH4xm4rpXnFRXY4eLkJha3XPM72IIwVjv5Lc,2697
75
+ plotnine/geoms/annotate.py,sha256=T5RxepV55HVNzPfkq43BWxduNIZPslRfPD1yx4bJtoo,4165
76
+ plotnine/geoms/annotation_logticks.py,sha256=6iGdo5szck0_nXdHnvMaRMZuRbH8Tg87tJ_aan_frqg,8969
77
+ plotnine/geoms/annotation_stripes.py,sha256=4Cw7TJ4SZChm_ioqfiiku0cPNnLruGuAP-4vyRao-9Y,6080
78
+ plotnine/geoms/geom.py,sha256=ayhBEoPc-9MLpu18HkwLoby4NIKC68ED4Pq0ioa4I9c,17687
79
+ plotnine/geoms/geom_abline.py,sha256=6oxAJl_yFKKmf7OTHvACw6fg6kgJEN54hGKkyWOLr6o,3188
80
+ plotnine/geoms/geom_area.py,sha256=QtS9NO17v-i5gvfakN8L96xwjt3dFuyZdYN8oXaXWOY,818
81
+ plotnine/geoms/geom_bar.py,sha256=-fMfgoO4NmHqoWZy8P-kGJxHY6wMPOlT1DT011x2mdU,1794
82
+ plotnine/geoms/geom_bin_2d.py,sha256=A4mBOEiyqJZN0EOhFkOK3diUbsgNlTw3jixVfPWmN-A,662
83
+ plotnine/geoms/geom_blank.py,sha256=38BpE9iSh3ktbOe9ayNer6IDD1q7E4EiKS_KnFSko0c,770
84
+ plotnine/geoms/geom_boxplot.py,sha256=mKp9iH2Zet9cXlTCwxfdv73Y057lvWBCs3P_7q7Adrg,9869
85
+ plotnine/geoms/geom_col.py,sha256=KCpme3vsc_tTbjGvL7ZhJZ4KFrQDQw3K8JyO6EBFn4E,1187
86
+ plotnine/geoms/geom_count.py,sha256=BkzQJFGf7z6lJ0fCrKDUqdGVo0GBwMUjOi3QVdvwEyQ,598
87
+ plotnine/geoms/geom_crossbar.py,sha256=0NGUY4fhL8VxpGaBgjKQNJy85XJeLc6GiPCs5LZQuCc,6242
88
+ plotnine/geoms/geom_density.py,sha256=UwUkJxI79L3z19tmoSI6ZYs418XTbRznd-Abzrec3VY,526
89
+ plotnine/geoms/geom_density_2d.py,sha256=9_FnLLRj0Z6DtttUYTOi7mx5bkZSxOTb6PbfuxfnILE,494
90
+ plotnine/geoms/geom_dotplot.py,sha256=NPeZ2jiDbUFgnpDTLOqtOxYBrtgzDQhq_oohhlXD2nc,8718
91
+ plotnine/geoms/geom_errorbar.py,sha256=jpCuQ8CE2RKfRR8Aw_3s473HXrOk-WPOl46n4oC-8UI,2199
92
+ plotnine/geoms/geom_errorbarh.py,sha256=mgRo8KngGyKVSPPF8vUYlzdslBJEIe9QJC--DlWL5t4,2213
93
+ plotnine/geoms/geom_freqpoly.py,sha256=lsr1dwZyR6gUbzl5SNJ5yYklsWGjkqYYAe3Mb8AWynk,339
94
+ plotnine/geoms/geom_histogram.py,sha256=rHtwpW2HNnxSwAXmZNoAVuB7qJsbETkrnCxFR7nJqqQ,367
95
+ plotnine/geoms/geom_hline.py,sha256=uMYBDkfshx2tskuZpjvo9N9Ztqt7AUxuaYFhMxeHi5c,2481
96
+ plotnine/geoms/geom_jitter.py,sha256=mJCLt2SoZN_tx_3XS8oF5JojtL2m5HO1bEqdN-JEPUg,2291
97
+ plotnine/geoms/geom_label.py,sha256=lPxmDlS6VgEHqD3Ac1Q-Zxs75JcnduoXjJ_D1AzzWew,2835
98
+ plotnine/geoms/geom_line.py,sha256=IzKVPwF_Oe3uwRpuh5Xu9LFvz0XcKqCL4pN03iGHBdk,522
99
+ plotnine/geoms/geom_linerange.py,sha256=dkgQ28YZfjyMb_y8s0wfcAz5mHF7f7y_h1Den5wHyJk,1282
100
+ plotnine/geoms/geom_map.py,sha256=tvzFVNOtSOfof1NQFduB8SV143o2irNsQrM8BgYiEKU,9602
101
+ plotnine/geoms/geom_path.py,sha256=nDrlmqPn869vyUF4RYbLKkbQka14SWJu9pqCN-cdKbQ,17106
102
+ plotnine/geoms/geom_point.py,sha256=KWM511zxIpKQzxI_NJpFqEszNWg5E7iHZJylKvvaK2c,4607
103
+ plotnine/geoms/geom_pointdensity.py,sha256=mVVy4IvWrQJroBv9Dw4dNfmI_NTxJNxReJwtXyb1ONU,468
104
+ plotnine/geoms/geom_pointrange.py,sha256=C746lDJfRe4M5k8sobEjaer_1IE60ZqIgs2cvq6Q3bY,2607
105
+ plotnine/geoms/geom_polygon.py,sha256=c6Ba9mvCMvY11FZfZATF78byuL7JMCqx3DEMMJBNfTE,4149
106
+ plotnine/geoms/geom_qq.py,sha256=CbNHewv2YM6VX3J9ysCP26E89lzH2MxUcYYsaaneKk4,380
107
+ plotnine/geoms/geom_qq_line.py,sha256=tn4M8whkIjMLLbz18jrtAFyR5OkGrNkOY2ZQty-d3tY,428
108
+ plotnine/geoms/geom_quantile.py,sha256=tS6zTO10DBdVz-lGU_E3JO-JI3VYIymWjZYlEkZK3sE,898
109
+ plotnine/geoms/geom_raster.py,sha256=eBhTkb_ybxuCKSExEm0Np5UAyBmj9qdDey8Ui9Xb1gs,6266
110
+ plotnine/geoms/geom_rect.py,sha256=dGOAkVXf5NSJgIbaVezg1ac78GqimElB9Ua0L_SH_YM,3717
111
+ plotnine/geoms/geom_ribbon.py,sha256=af9uElWaJQSc4taTLZ7ZDzng2Zw4IrIfNPrus4OuTmM,5771
112
+ plotnine/geoms/geom_rug.py,sha256=2Sdarf5z3w4JbklVUk7JykWdbBNKaT0Wl5NMBl4LqT4,3520
113
+ plotnine/geoms/geom_segment.py,sha256=v63MoKlK4aNengCXYdPeQrcBIgBCis8QobpF3CJOf5U,3052
114
+ plotnine/geoms/geom_sina.py,sha256=G1K8TCC_de5VFHHFCOICVDZ71Dy-raRZiZt6y1Z0ktw,950
115
+ plotnine/geoms/geom_smooth.py,sha256=7L7HdJCU2a63KGRs1RQnZ-c96Z63e-C7Znm43aWR3kE,3635
116
+ plotnine/geoms/geom_spoke.py,sha256=s-kug0H-YGhyjso9W43XvzJf9-g6inh8zzuSFeXzSaU,977
117
+ plotnine/geoms/geom_step.py,sha256=tTohADfGyC3M4zCzxLUhzkA2XsHBeH0eaWq-m2DQEQQ,2371
118
+ plotnine/geoms/geom_text.py,sha256=fOGjIZL5ajB78su5lUGBo_uPa-NvTCaPo640oEbJE_4,11884
119
+ plotnine/geoms/geom_tile.py,sha256=3x9BSxaSr-ys6N5R2wY8B9fNiyV9vMdoXbjIDqHy_ng,1431
120
+ plotnine/geoms/geom_violin.py,sha256=ftrbmzvSEANPCdj7lgi7_HAoVHrGt3rI7z0rHL0iZ3Y,7214
121
+ plotnine/geoms/geom_vline.py,sha256=NTrKu5wpcoiWRtcVVY5Q3xQEBmp1q4DgBgHzwTbfmOA,3387
122
+ plotnine/guides/__init__.py,sha256=ulI-mDhtq3jAQEAqPv8clrn3UHGFOu3xRuO7jXlq-LY,201
123
+ plotnine/guides/guide.py,sha256=CHz0SnfrSqKCl4aHmkM2r5YFITsa1XVDcaglW3nuIt4,8149
124
+ plotnine/guides/guide_axis.py,sha256=zG_5Ot1kTuHOeuQspL5V1A1-7c7X8cNeMDoF01Ghh2w,296
125
+ plotnine/guides/guide_colorbar.py,sha256=gL0218k3iJPNEpj6hWKxau3R8qRpT2bPkS1q9Ptcrxw,16266
126
+ plotnine/guides/guide_legend.py,sha256=CrcV3iCAcEfUnSbkGtsS31c3OFQMWKiHqZZXejxOdno,14212
127
+ plotnine/guides/guides.py,sha256=cV7CwoYNrjkeaDHZ2AGcS2Dij5RpPovSiB-v47E7vhQ,15471
128
+ plotnine/mapping/__init__.py,sha256=DLu9E0kwwuHxzTUenoVjCNTTdkWMwIDtkExLleBq1MI,205
129
+ plotnine/mapping/_atomic.py,sha256=TbobHVJlHRoSHibi6OOWMVM2J1r_kKQJMS6G5zvEhrg,4029
130
+ plotnine/mapping/_env.py,sha256=PrPOW1hypspyd_kFdnepfn5NIC2n_E7CZfPLqp0E_1U,6374
131
+ plotnine/mapping/_eval_environment.py,sha256=PTrnnqrxMXqjt23t2NGRcU9i8Jie3ZaMe6W5aKtI7bI,2502
132
+ plotnine/mapping/aes.py,sha256=zQgWagmoEsykSOf1eMK2QNaofAmoyshZasqs7EOiMhg,16815
133
+ plotnine/mapping/evaluation.py,sha256=kblTxVv3M4xIGnHyReUU0RtmmIN77Or2JBcci0nGGfE,5913
134
+ plotnine/positions/__init__.py,sha256=DQZE6duMUNRQifpa6SBrOKxZpGDk4NqQSGZLr9Yc9GI,595
135
+ plotnine/positions/position.py,sha256=BRD_dUh9dhdSP4SQfl8_u_VpaY_s3A2zuznwOn5M_80,8325
136
+ plotnine/positions/position_dodge.py,sha256=6PbAhWDfNK7NK6FZZOcfr4mdmVOUV9VLH8xD0dbQFEU,3941
137
+ plotnine/positions/position_dodge2.py,sha256=QI-oTIiYFOARozbBRuGQ1RHnZI_DKbCR2pJbuXlZvpQ,5661
138
+ plotnine/positions/position_fill.py,sha256=DvBm_6Oh2X3tSl67gP-iFoBmbYHy_WfZotHSrY4k0Rg,160
139
+ plotnine/positions/position_identity.py,sha256=9GE4WpuISLcGWTsgGqF9MARKhxdVySk5xeHACtyfJIk,203
140
+ plotnine/positions/position_jitter.py,sha256=p5s21ry-k7dK2G_jtWFghocbA-1XS73ljMiuJRIM4WE,2226
141
+ plotnine/positions/position_jitterdodge.py,sha256=D8J-9LfQgWaU6x5cZxkqze5NbKiHaDysUn-ftsxV7sU,3315
142
+ plotnine/positions/position_nudge.py,sha256=IKzQsnZ5xpUzi_yP2GFBl249jICQv4j3dGpEcwx88UY,949
143
+ plotnine/positions/position_stack.py,sha256=faomJVM-YsrxDVAmKC_9G3t6dNg3pgmaIcEJo39Xrb4,4027
144
+ plotnine/scales/__init__.py,sha256=TvbyMRL9dASGnH0rob7g_AgI2MY58wSCv-0csblWsu4,5526
145
+ plotnine/scales/_expand.py,sha256=ynlg_6s3NDTIe8dcP1C6XpiaIva0sin9fILFLywS04Y,1551
146
+ plotnine/scales/_runtime_typing.py,sha256=Ror99gzX0pe25F3trm2TZOyQhNhIZiS8IfbYpdRh-aU,1311
147
+ plotnine/scales/limits.py,sha256=fymDbVwAXTzYryLfMM7AWKfOkP2uOj5_dhTPC5PVYk0,5626
148
+ plotnine/scales/range.py,sha256=xBlFdAhthH1zKIJZDdkEyAA2kMZtyDorDFHKBMHKyAQ,1379
149
+ plotnine/scales/scale.py,sha256=T7oMfiXA2xOL_LQQIEKY_06VvXVfF-norNpc2gdTNNw,8078
150
+ plotnine/scales/scale_alpha.py,sha256=lYVZeaCC2pk-0-BoXnOeP0RdIbHYk6qo3DRClJrxTKo,2350
151
+ plotnine/scales/scale_color.py,sha256=h5UHaUjpltze9-wHG1DG0kkjIyEYxYK86wqykZe39jg,15558
152
+ plotnine/scales/scale_continuous.py,sha256=YMRjGh7QS644ajx5dVPJ9QTrWbTjmKt62MvVSFl3Y7U,16500
153
+ plotnine/scales/scale_datetime.py,sha256=OM9gfHKGkQIBrgqCEE00zUV0cMXXxTIS7wc9dYQZ6sE,3983
154
+ plotnine/scales/scale_discrete.py,sha256=UwAB0icMljH-eW6mK3g0YWAVzuE4P_91ZMYJhoMoMV4,9431
155
+ plotnine/scales/scale_identity.py,sha256=yNo4IUv9yTC3qA-Fhz4OqvDmiBfg8UFwQSKCY4bTIpE,2410
156
+ plotnine/scales/scale_linetype.py,sha256=pwLTmglN6d4bnChbuBi6HWbDP_nsE4viXD8CK6XKBPw,1373
157
+ plotnine/scales/scale_manual.py,sha256=FmzF4gRxdiDVgryodN2Mx6Gr1FHW0grKO3WiL1ffkTc,4609
158
+ plotnine/scales/scale_shape.py,sha256=I0JdYDreCbznQilaTi6m27F91N5daCj9D2ZPuP2Szls,2081
159
+ plotnine/scales/scale_size.py,sha256=04nUQzKB_qpuQrcg8C7jYmLDYtdnlg6PkY7SivP5OlY,3273
160
+ plotnine/scales/scale_stroke.py,sha256=7LKAg6-Q3VTuw78N2XEjFFzBa8yY5NVnfBSoJGsBS5o,1711
161
+ plotnine/scales/scale_xy.py,sha256=5NfFOJb2PeqLS3DuUylFGzzX7EJAaZWOO8LfLcU5zgU,10088
162
+ plotnine/scales/scales.py,sha256=rmHFm7roKEeZhKs81gjhCNMyNpvXmQOqxqvEH8GCwOs,10113
163
+ plotnine/stats/__init__.py,sha256=IZVXnHYmdpdev9NzxA-Nw9dZnuq1pudZNWLbYbvfWSg,1386
164
+ plotnine/stats/binning.py,sha256=0B1pNKPBWuSo_w3LDXkoBQjup71klYQ1FxaparKomFs,9611
165
+ plotnine/stats/density.py,sha256=TQihwduejW5I5oZ8GdWI_U_n-5N49SfMShm3OtlDhW8,6372
166
+ plotnine/stats/distributions.py,sha256=pskpWUFcyrLR6AYeZAciRH0Cb267ME3G2mvm79xsgMc,1178
167
+ plotnine/stats/smoothers.py,sha256=lwZFCKqt5JIzgUh_HmKUVRHAv5hWVBg2XgXvLWG-xxQ,17477
168
+ plotnine/stats/stat.py,sha256=GcGuaTXYYOFbS7Ux1tYNGS-Xq47SIdBq8vCjHODbZSU,11469
169
+ plotnine/stats/stat_bin.py,sha256=BwYn4wktVQQ3_4blRIE7kOO38e5rv_yWPVf3p2Gi9WU,4623
170
+ plotnine/stats/stat_bin_2d.py,sha256=tbdgGDcoPuSXn9cJ9ZJ5MWu6o3Gpp31pcBgBPR9l9qo,5305
171
+ plotnine/stats/stat_bindot.py,sha256=YClKlsV3jHvc60uQGFQ7yRQG5cdGD831js0nU3dRHEE,10259
172
+ plotnine/stats/stat_boxplot.py,sha256=6dpiUz83edy4eKc1DXgqA4OgoHkjzW14jhEjawAee74,6034
173
+ plotnine/stats/stat_count.py,sha256=AcH2jHbQy1O1BWSwy2k6Lw9RsJJ0uOHRkva7YBMcaik,1994
174
+ plotnine/stats/stat_density.py,sha256=d1AKQbhB_MOKI7Kljbih2mmlr7jpjjN5Drgs2iOjn5s,10384
175
+ plotnine/stats/stat_density_2d.py,sha256=SBYzK7ISTa4-HiQnsMaPdU7gq8ZXzqaUjzm6rb2VnwE,5714
176
+ plotnine/stats/stat_ecdf.py,sha256=lXPzaXe2O-b7oPbB1C1zJXewwICblX2HqoYIsDUcIF8,1668
177
+ plotnine/stats/stat_ellipse.py,sha256=u4Qio39Mbc4iFJzo-4d6DqbdyLK6_gNtwEvxRhgNNDk,7658
178
+ plotnine/stats/stat_function.py,sha256=41ePVGdonZnQOlrsZ3E_Yy0ecOzzS2j-kVCmbUZfBQs,3211
179
+ plotnine/stats/stat_hull.py,sha256=0OqDv-4behPqg8SpFo1btdIICGzHuzVeRMzaO8dQ94c,1542
180
+ plotnine/stats/stat_identity.py,sha256=xptxspcq2XYeDGqH8jNUI9so35NG9glRrxaDS6OzEh8,447
181
+ plotnine/stats/stat_pointdensity.py,sha256=JMXvO1wBBFntAdMgnDPxVPnt8jDLrgdhInh05tr2I0k,2198
182
+ plotnine/stats/stat_qq.py,sha256=cEyIYK1oX99tPh4m31B4z5rq3eZPEbZ8pnAuz9gY7xA,3457
183
+ plotnine/stats/stat_qq_line.py,sha256=i5HVjl2tFu1k7TvpAfm3b7AWE-UDyWvReP0WpzWT1q0,3524
184
+ plotnine/stats/stat_quantile.py,sha256=agbChKgJC3EUqqTKdKbH1Pwz_TDU_V9sU7XpAmJ40to,2635
185
+ plotnine/stats/stat_sina.py,sha256=fiIbfozux0TPLfo5skBXAJHEgrX37KC1Ju02d99oMQI,9431
186
+ plotnine/stats/stat_smooth.py,sha256=f5g7TtIcV847uGFdM2-udNZu2nH9HFA5LOryOwbfGyM,8039
187
+ plotnine/stats/stat_sum.py,sha256=RRqcCLrc8cU2txShukChog0AVPsunA8m0oA7CweAj4U,1718
188
+ plotnine/stats/stat_summary.py,sha256=5o9U-ZeJfD1b1DBrrHD6rQ4QuDO3QERgRcQGZVvrmhM,9298
189
+ plotnine/stats/stat_summary_bin.py,sha256=whYcoXzrgZowdt_R9lq2FY0lNQrywFXg540ohu3TzBA,5739
190
+ plotnine/stats/stat_unique.py,sha256=1SdLNm2CjhjONAwo714uB3tc5KX7vSDHAi1geJdWtDY,449
191
+ plotnine/stats/stat_ydensity.py,sha256=_OVYc-QELPKMc24BvQaA9cPkfEoC_hW2teeo8yL8iao,5661
192
+ plotnine/themes/__init__.py,sha256=tEKIF4gYmOF2Z1-_UDdK8zh41dLl-61HUGIhOQvki6I,916
193
+ plotnine/themes/seaborn_rcmod.py,sha256=Pi-UX5LyH9teSuteYpqPOEnfLgKUz01LnKDyDA7Aois,15502
194
+ plotnine/themes/targets.py,sha256=MjBRWWRgsLXXM_PJffPsV4DttQJB_m11jdD837BteuU,1686
195
+ plotnine/themes/theme.py,sha256=Eu14IREf82NImvAdMLn9UAC4CpdLRrxAJJUTodLua2A,16407
196
+ plotnine/themes/theme_538.py,sha256=hr0FaGAffZYU3m8o90WuUWntaPgI2O_eGiaBz259MiM,1088
197
+ plotnine/themes/theme_bw.py,sha256=XXUt9KXEIkROiU0ZVIZicypneb-zL5K1cQFPqYd5WAI,1010
198
+ plotnine/themes/theme_classic.py,sha256=B6QkU6blGnEY5iaiPtu4VsvFzC0peWSAhlKiC2SJSkM,923
199
+ plotnine/themes/theme_dark.py,sha256=tF6BJ2A4jE6C-Mhl95DQiAbu-mK0Hr1MaymhbJzaD2Q,1255
200
+ plotnine/themes/theme_gray.py,sha256=VRPCWvorGLnqNRVgtvACYDPEvHMQigtp-qMrgOcyar8,5265
201
+ plotnine/themes/theme_light.py,sha256=1vDa6QlLz2vJaa1gYfyttVuXxde2MwDnMnJAqToJMGs,1415
202
+ plotnine/themes/theme_linedraw.py,sha256=woMr18xoEJmsD8ZCiUpdyn-CE-P1AGFHRNapwCGWUjg,1350
203
+ plotnine/themes/theme_matplotlib.py,sha256=3JPOGhFz6Nul2s03Djd254RPtHtcQ0fsi3Hc9OIi0kc,4248
204
+ plotnine/themes/theme_minimal.py,sha256=YhkKNA48jP2OLa8-kHMfXFEFRjcsfWBLMID2orITrmo,884
205
+ plotnine/themes/theme_seaborn.py,sha256=8giJh8QvkMJ8pr_XXHPDMfkysoI2_yr0vJhz48_sQGI,4319
206
+ plotnine/themes/theme_tufte.py,sha256=qUOrZhQyfJgc0fmy8Es7tT7aYqUSzCjvkP7-dBilwHE,1926
207
+ plotnine/themes/theme_void.py,sha256=itsmb9pWCZAwgccw_zHDjQRfhRRbAiMNo4zZ1zeBgIU,3223
208
+ plotnine/themes/theme_xkcd.py,sha256=5MOdj_H23Kr_jbDnepmq1DQDbn8-TfUmtzYBZTb4RB4,2207
209
+ plotnine/themes/themeable.py,sha256=Px91yh5pft24mC-4uUFLYpU-45iX6cE64j3t-a20wug,71744
210
+ plotnine/themes/elements/__init__.py,sha256=xV1la_mTv1BQ3zQp7ZGVGPdV6KohvEVhKAi1uPTeAs0,327
211
+ plotnine/themes/elements/element_base.py,sha256=D7cfEglzsSuhW91KpZVAZ2MAHWZp64r9Aajoh8uMGZ4,832
212
+ plotnine/themes/elements/element_blank.py,sha256=4r7-6HeR1494oWNIGQh0ASrFQ4SLvYa6aQHA85eH-Ds,187
213
+ plotnine/themes/elements/element_line.py,sha256=yZvj9B3M2a7a8o2J0n-q0uviNv34PtJVUr_UefZ-v5I,2005
214
+ plotnine/themes/elements/element_rect.py,sha256=w5cLH-Sr4cTRXVdkRiu8kBqFt3TXHhIb1MUITfi89gE,1767
215
+ plotnine/themes/elements/element_text.py,sha256=8yhwBa9s9JKCtBcqcBNybbCGK6ieDnZv4SHiC4Sy2qc,6255
216
+ plotnine/themes/elements/margin.py,sha256=jMHe-UKHHer_VYwAVDC-Tz2-AP_4YDuXPTWAuacoqgU,4080
217
+ plotnine-0.15.1.dist-info/licenses/LICENSE,sha256=GY4tQiUd17Tq3wWR42Zs9MRTFOTf6ahIXhZTcwAdOeU,1082
218
+ plotnine-0.15.1.dist-info/METADATA,sha256=rDMZR95-O9S5B-0Qpcbds6L6FmF6-ojjx3PpvVDgFaA,9496
219
+ plotnine-0.15.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
220
+ plotnine-0.15.1.dist-info/top_level.txt,sha256=t340Mbko1ZbmvYPkQ81dIiPHcaQdTUszYz-bWUpr8ys,9
221
+ plotnine-0.15.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,10 +0,0 @@
1
- from ._compose import ADD, DIV, OR, Compose
2
- from ._spacer import spacer
3
-
4
- __all__ = (
5
- "Compose",
6
- "ADD",
7
- "DIV",
8
- "OR",
9
- "spacer",
10
- )