maxplotlibx 0.1.6__py3-none-any.whl → 0.1.8__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.
- maxplotlib/backends/plotext/figure.py +101 -5
- maxplotlib/canvas/canvas.py +1430 -37
- maxplotlib/subfigure/line_plot.py +1895 -29
- maxplotlib/tests/test_canvas.py +768 -4
- maxplotlib/tests/test_plot.py +4 -4
- maxplotlib/tests/test_plotext.py +161 -7
- maxplotlib/tests/test_plotly_backend.py +257 -5
- maxplotlib/tests/test_styles_and_colors.py +61 -0
- maxplotlibx-0.1.8.dist-info/METADATA +388 -0
- {maxplotlibx-0.1.6.dist-info → maxplotlibx-0.1.8.dist-info}/RECORD +13 -12
- maxplotlibx-0.1.6.dist-info/METADATA +0 -160
- {maxplotlibx-0.1.6.dist-info → maxplotlibx-0.1.8.dist-info}/WHEEL +0 -0
- {maxplotlibx-0.1.6.dist-info → maxplotlibx-0.1.8.dist-info}/licenses/LICENSE +0 -0
- {maxplotlibx-0.1.6.dist-info → maxplotlibx-0.1.8.dist-info}/top_level.txt +0 -0
|
@@ -2,8 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
from typing import Any
|
|
5
6
|
|
|
6
|
-
from plotext
|
|
7
|
+
from plotext import figure as _plotext_figure
|
|
7
8
|
|
|
8
9
|
_ANSI_ESCAPE_RE = re.compile(r"\x1B\[[0-?]*[ -/]*[@-~]")
|
|
9
10
|
|
|
@@ -12,20 +13,115 @@ def strip_ansi(text: str) -> str:
|
|
|
12
13
|
return _ANSI_ESCAPE_RE.sub("", text)
|
|
13
14
|
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
class _Plotext6Axes:
|
|
17
|
+
"""Small compatibility surface for maxplotlib's plotext renderer."""
|
|
18
|
+
|
|
19
|
+
def __init__(self, figure):
|
|
20
|
+
self._figure = figure
|
|
21
|
+
|
|
22
|
+
def _draw(self, signal, label=None):
|
|
23
|
+
if label is not None:
|
|
24
|
+
signal.label(label)
|
|
25
|
+
self._figure.draw(signal)
|
|
26
|
+
|
|
27
|
+
def plot(self, x, y, **kwargs):
|
|
28
|
+
signal = self._figure.signal(x, y, marker=kwargs.get("marker"))
|
|
29
|
+
self._draw(signal, kwargs.get("label"))
|
|
30
|
+
|
|
31
|
+
scatter = plot
|
|
32
|
+
|
|
33
|
+
def bar(self, *args, **kwargs):
|
|
34
|
+
label = kwargs.pop("label", None)
|
|
35
|
+
kwargs.pop("color", None)
|
|
36
|
+
kwargs.pop("fill", None)
|
|
37
|
+
signal = self._figure.bar(*args, **kwargs)
|
|
38
|
+
self._draw(signal, label)
|
|
39
|
+
|
|
40
|
+
def error(self, x, y, *, xerr=None, yerr=None, color=None, label=None):
|
|
41
|
+
signal = self._figure.error(x, y, yerr, xerr, pixel=color)
|
|
42
|
+
self._draw(signal, label)
|
|
43
|
+
|
|
44
|
+
def matrix_plot(self, data, **kwargs):
|
|
45
|
+
signal = self._figure.heatmap(data, symbol=kwargs.get("marker"))
|
|
46
|
+
self._draw(signal)
|
|
47
|
+
|
|
48
|
+
def text(self, label, x, y, **kwargs):
|
|
49
|
+
# Plotext 6 keeps text colour in its marker object; the renderer only
|
|
50
|
+
# needs the portable text/alignment arguments here.
|
|
51
|
+
kwargs.pop("color", None)
|
|
52
|
+
signal = self._figure.text(x, y, label, **kwargs)
|
|
53
|
+
self._figure.draw(signal)
|
|
54
|
+
|
|
55
|
+
def title(self, label):
|
|
56
|
+
self._figure.title(label)
|
|
57
|
+
|
|
58
|
+
def xlabel(self, label):
|
|
59
|
+
self._figure.label(label, axis=0)
|
|
60
|
+
|
|
61
|
+
def ylabel(self, label):
|
|
62
|
+
self._figure.label(label, axis=1)
|
|
63
|
+
|
|
64
|
+
def grid(self, active=True, *_args):
|
|
65
|
+
self._figure.ruler("x").grid(active)
|
|
66
|
+
self._figure.ruler("y").grid(active)
|
|
67
|
+
|
|
68
|
+
def xlim(self, lower=None, upper=None):
|
|
69
|
+
self._figure.ruler("x").lim(lower, upper)
|
|
70
|
+
|
|
71
|
+
def ylim(self, lower=None, upper=None):
|
|
72
|
+
self._figure.ruler("y").lim(lower, upper)
|
|
73
|
+
|
|
74
|
+
def xscale(self, scale):
|
|
75
|
+
self._figure.ruler("x").scale(scale)
|
|
76
|
+
|
|
77
|
+
def yscale(self, scale):
|
|
78
|
+
self._figure.ruler("y").scale(scale)
|
|
79
|
+
|
|
80
|
+
def xticks(self, positions=None, labels=None):
|
|
81
|
+
self._figure.ruler("x").ticks(positions, labels)
|
|
82
|
+
|
|
83
|
+
def yticks(self, positions=None, labels=None):
|
|
84
|
+
self._figure.ruler("y").ticks(positions, labels)
|
|
85
|
+
|
|
86
|
+
def plotsize(self, width=None, height=None):
|
|
87
|
+
self._figure.plot_size(width, height)
|
|
88
|
+
|
|
89
|
+
def horizontal_line(self, position, **kwargs):
|
|
90
|
+
kwargs.pop("color", None)
|
|
91
|
+
self._figure.line(position, orientation=0, **kwargs)
|
|
92
|
+
|
|
93
|
+
def vertical_line(self, position, **kwargs):
|
|
94
|
+
kwargs.pop("color", None)
|
|
95
|
+
self._figure.line(position, orientation=1, **kwargs)
|
|
96
|
+
|
|
97
|
+
def subplots(self, rows=None, cols=None):
|
|
98
|
+
self._figure.subplots(rows, cols)
|
|
99
|
+
return self
|
|
100
|
+
|
|
101
|
+
def subplot(self, row=None, col=None):
|
|
102
|
+
return _Plotext6Axes(self._figure.subplot(row, col))
|
|
103
|
+
|
|
104
|
+
def __getattr__(self, name):
|
|
105
|
+
return getattr(self._figure, name)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def create_plotext_figure(nrows: int = 1, ncols: int = 1):
|
|
109
|
+
# Plotext 6 exposes the figure through its public API rather than the
|
|
110
|
+
# removed private ``plotext._figure._figure_class``. It is a singleton,
|
|
111
|
+
# so reset it before handing it to maxplotlib as a fresh canvas.
|
|
112
|
+
figure = _Plotext6Axes(_plotext_figure.clear())
|
|
17
113
|
if nrows > 1 or ncols > 1:
|
|
18
114
|
figure.subplots(nrows, ncols)
|
|
19
115
|
return figure
|
|
20
116
|
|
|
21
117
|
|
|
22
118
|
class PlotextFigure:
|
|
23
|
-
def __init__(self, figure:
|
|
119
|
+
def __init__(self, figure: Any, suptitle: str | None = None):
|
|
24
120
|
self.figure = figure
|
|
25
121
|
self.suptitle = suptitle
|
|
26
122
|
|
|
27
123
|
def build(self, keep_colors: bool = True) -> str:
|
|
28
|
-
output = self.figure.build()
|
|
124
|
+
output = str(self.figure.build())
|
|
29
125
|
if self.suptitle:
|
|
30
126
|
output = f"{self.suptitle}\n{output}"
|
|
31
127
|
return output if keep_colors else strip_ansi(output)
|