Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 4cd39c5

Browse files
committedApr 4, 2025
Add helpers for common artist edges
1 parent 2d102ac commit 4cd39c5

File tree

3 files changed

+49
-26
lines changed

3 files changed

+49
-26
lines changed
 

‎data_prototype/axes.py

+8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33

44
import matplotlib as mpl
5+
from data_prototype.artist import CompatibilityAxes
56
from matplotlib.axes._axes import Axes as MPLAxes, _preprocess_data
7+
from matplotlib.axes._base import _process_plot_var_args
68
import matplotlib.collections as mcoll
79
import matplotlib.cbook as cbook
810
import matplotlib.markers as mmarkers
@@ -21,6 +23,12 @@ class Axes(MPLAxes):
2123
# Name for registering as a projection so we can experiment with it
2224
name = "data-prototype"
2325

26+
def __init__(self, *args, **kwargs):
27+
super().__init__(*args, **kwargs)
28+
self._ca = CompatibilityAxes(self)
29+
self._get_lines_mirror = _process_plot_var_args("mirror")
30+
self.add_artist(self._ca)
31+
2432
@_preprocess_data(
2533
replace_names=[
2634
"x",

‎data_prototype/conversion_edge.py

+33-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from typing import Any
88
import numpy as np
99

10-
from data_prototype.description import Desc, desc_like
10+
from data_prototype.description import Desc, desc_like, ShapeSpec
1111

1212
from matplotlib.transforms import Transform
1313

@@ -112,6 +112,17 @@ def from_default_value(
112112
) -> "DefaultEdge":
113113
return cls(name, {}, {key: output}, weight, invertable=False, value=value)
114114

115+
@classmethod
116+
def from_rc(
117+
cls, rc_name: str, key: str | None = None, coordinates: str = "display"
118+
):
119+
from matplotlib import rcParams
120+
121+
if key is None:
122+
key = rc_name.split(".")[-1]
123+
scalar = Desc((), coordinates)
124+
return cls.from_default_value(f"{rc_name}_rc", key, scalar, rcParams[rc_name])
125+
115126
def evaluate(self, input: dict[str, Any]) -> dict[str, Any]:
116127
return {k: self.value for k in self.output}
117128

@@ -428,3 +439,24 @@ def cache_key(self):
428439
import uuid
429440

430441
return str(uuid.uuid4())
442+
443+
def coord_and_default(
444+
key: str,
445+
shape: ShapeSpec = (),
446+
coordinates: str = "display",
447+
default_value: Any = None,
448+
default_rc: str | None = None,
449+
):
450+
if default_rc is not None:
451+
if default_value is not None:
452+
raise ValueError(
453+
"Only one of 'default_value' and 'default_rc' may be specified"
454+
)
455+
def_edge = DefaultEdge.from_rc(default_rc, key, coordinates)
456+
else:
457+
scalar = Desc((), coordinates)
458+
def_edge = DefaultEdge.from_default_value(
459+
f"{key}_def", key, scalar, default_value
460+
)
461+
coord_edge = CoordinateEdge.from_coords(key, {key: Desc(shape)}, coordinates)
462+
return coord_edge, def_edge

‎data_prototype/text.py

+8-25
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,24 @@
44

55
from .artist import Artist
66
from .description import Desc
7-
from .conversion_edge import Graph, CoordinateEdge, DefaultEdge
7+
from .conversion_edge import Graph, CoordinateEdge, coord_and_default
88

99

1010
class Text(Artist):
1111
def __init__(self, container, edges=None, **kwargs):
1212
super().__init__(container, edges, **kwargs)
1313

14-
scalar = Desc((), "display")
15-
1614
edges = [
1715
CoordinateEdge.from_coords(
1816
"xycoords", {"x": Desc((), "auto"), "y": Desc((), "auto")}, "data"
1917
),
20-
CoordinateEdge.from_coords("text", {"text": Desc(())}, "display"),
21-
CoordinateEdge.from_coords("color", {"color": Desc(())}, "display"),
22-
CoordinateEdge.from_coords("alpha", {"alpha": Desc(())}, "display"),
23-
CoordinateEdge.from_coords(
24-
"fontproperties", {"fontproperties": Desc(())}, "display"
25-
),
26-
CoordinateEdge.from_coords("usetex", {"usetex": Desc(())}, "display"),
27-
CoordinateEdge.from_coords("rotation", {"rotation": Desc(())}, "display"),
28-
CoordinateEdge.from_coords(
29-
"antialiased", {"antialiased": Desc(())}, "display"
30-
),
31-
DefaultEdge.from_default_value("text_def", "text", scalar, ""),
32-
DefaultEdge.from_default_value("color_def", "color", scalar, "k"),
33-
DefaultEdge.from_default_value("alpha_def", "alpha", scalar, 1),
34-
DefaultEdge.from_default_value(
35-
"fontproperties_def", "fontproperties", scalar, FontProperties()
36-
),
37-
DefaultEdge.from_default_value("usetex_def", "usetex", scalar, False),
38-
DefaultEdge.from_default_value("rotation_def", "rotation", scalar, 0),
39-
DefaultEdge.from_default_value(
40-
"antialiased_def", "antialiased", scalar, False
41-
),
18+
*coord_and_default("text", default_value=""),
19+
*coord_and_default("color", default_rc="text.color"),
20+
*coord_and_default("alpha", default_value=1),
21+
*coord_and_default("fontproperties", default_value=FontProperties()),
22+
*coord_and_default("usetex", default_rc="text.usetex"),
23+
*coord_and_default("rotation", default_value=0),
24+
*coord_and_default("antialiased", default_rc="text.antialiased"),
4225
]
4326

4427
self._graph = self._graph + Graph(edges)

0 commit comments

Comments
 (0)
Please sign in to comment.