Skip to content

Commit f01e33c

Browse files
committed
WIP: Implement new style image class
1 parent 85378e4 commit f01e33c

File tree

2 files changed

+81
-3
lines changed

2 files changed

+81
-3
lines changed

data_prototype/image.py

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from typing import Sequence
2+
3+
import matplotlib.cm as mcm
4+
import matplotlib.colors as mcolors
5+
import matplotlib.transforms as mtransforms
6+
import numpy as np
7+
8+
from .artist import Artist
9+
from .description import Desc, desc_like
10+
from .conversion_edge import Edge, FuncEdge, Graph, CoordinateEdge, DefaultEdge
11+
12+
13+
class Image(Artist):
14+
def __init__(self, container, edges=None, **kwargs):
15+
super().__init__(container, edges, **kwargs)
16+
17+
strdesc = Desc((), str)
18+
arrdesc = Desc(("M", "N"), np.float64)
19+
normdesc = Desc((), mcolors.Normalize, "norm")
20+
cmapdesc = Desc((), mcolors.Colormap, "cmap")
21+
22+
self._edges += [
23+
CoordinateEdge.from_coords(
24+
"A_pcolor", {"A": Desc(("M", "N"), np.float64)}, "data"
25+
),
26+
CoordinateEdge.from_coords(
27+
"A_rgb", {"A": Desc(("M", "N", 3), np.float64)}, "rgb"
28+
),
29+
CoordinateEdge.from_coords(
30+
"A_rgba", {"A": Desc(("M", "N", 4), np.float64)}, "rgba"
31+
),
32+
FuncEdge.from_func(
33+
"norm_obj",
34+
lambda norm: mcm._auto_norm_from_scale(norm),
35+
{"norm": desc_like(strdesc, coordinates="norm")},
36+
{"norm": normdesc},
37+
),
38+
FuncEdge.from_func(
39+
"cmap_obj",
40+
lambda cmap: mcm._colormaps[cmap],
41+
{"cmap": desc_like(strdesc, coordinates="cmap")},
42+
{"cmap": cmapdesc},
43+
),
44+
FuncEdge.from_func(
45+
"A_norm",
46+
lambda A, norm: norm(A),
47+
{"A": desc_like(arrdesc), "norm": normdesc},
48+
{"A": desc_like(arrdesc, coordinates="norm")},
49+
),
50+
FuncEdge.from_func(
51+
"A_cmap",
52+
lambda A, cmap: cmap(A),
53+
{"A": desc_like(arrdesc, coordinates="norm"), "cmap": cmapdesc},
54+
{"A": Desc(("M", "N", 4), np.float64, coordinates="rgba")},
55+
),
56+
DefaultEdge.from_default_value("cmap_def", "cmap", strdesc, "viridis"),
57+
DefaultEdge.from_default_value("norm_def", "norm", strdesc, "linear"),
58+
CoordinateEdge.from_coords(
59+
"A_rgba", {"A": Desc(("M", "N", 4), np.float64, "rgba")}, "display"
60+
),
61+
]
62+
63+
def draw(self, renderer, edges: Sequence[Edge]) -> None:
64+
import matplotlib.pyplot as plt
65+
66+
g = Graph(list(edges) + self._edges)
67+
g.visualize()
68+
plt.show()
69+
conv = g.evaluator(
70+
self._container.describe(),
71+
{"A": Desc(("M", "N", 4), np.float64, "display")},
72+
)
73+
query, _ = self._container.query(g)
74+
image = conv.evaluate(query)["A"]
75+
76+
gc = renderer.new_gc()
77+
renderer.draw_image(gc, image, mtransforms.IdentityTransform())
78+
...

examples/subsample.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import numpy as np
2222

2323
from data_prototype.description import Desc, desc_like
24-
from data_prototype.wrappers import ImageWrapper
24+
from data_prototype.artist import Image, CompatibilityArtist as CA
2525

2626
from skimage.transform import downscale_local_mean
2727

@@ -74,10 +74,10 @@ def query(
7474
sub = Subsample()
7575
cmap = mpl.colormaps["coolwarm"]
7676
norm = Normalize(-2.2, 2.2)
77-
im = ImageWrapper(sub, cmap=cmap, norm=norm)
77+
im = Image(sub, cmap=cmap, norm=norm)
7878

7979
fig, ax = plt.subplots()
80-
ax.add_artist(im)
80+
ax.add_artist(CA(im))
8181
ax.set_xlim(-3, 3)
8282
ax.set_ylim(-3, 3)
8383
plt.show()

0 commit comments

Comments
 (0)