@@ -231,13 +231,28 @@ class ScalebarParams:
231231 scalebar_kwargs : Mapping [str , Any ] = field (default_factory = dict )
232232
233233
234- @dataclass
235- class ShapesRenderParams :
234+ @dataclass (kw_only = True )
235+ class RenderParams :
236+ """Fields shared by every ``*RenderParams``.
237+
238+ These four are the only fields with identical type and default across all five renderers.
239+ ``kw_only=True`` keeps field order irrelevant across inheritance (subclasses add required fields
240+ such as ``cmap_params``), and all call sites construct these dataclasses by keyword. Subclasses
241+ carry their renderer-specific fields (including ``cmap_params``, whose type varies per renderer).
242+ """
243+
244+ element : str
245+ zorder : int = 0
246+ colorbar : bool | str | None = "auto"
247+ colorbar_params : dict [str , object ] | None = None
248+
249+
250+ @dataclass (kw_only = True )
251+ class ShapesRenderParams (RenderParams ):
236252 """Shapes render parameters."""
237253
238254 cmap_params : CmapParams
239255 outline_params : OutlineParams
240- element : str
241256 color : Color | None = None
242257 col_for_color : str | None = None
243258 col_for_outline_color : str | None = None
@@ -249,27 +264,23 @@ class ShapesRenderParams:
249264 scale : float = 1.0
250265 transfunc : Callable [[float ], float ] | None = None
251266 method : str | None = None
252- zorder : int = 0
253267 table_name : str | None = None
254268 table_layer : str | None = None
255269 shape : Literal ["circle" , "hex" , "visium_hex" , "square" ] | None = None
256270 # Fast mode: render each shape as a single dot at its centroid instead of its geometry.
257271 as_points : bool = False
258272 size : float = 1.0 # marker size for as_points (matplotlib scatter ``s``)
259273 ds_reduction : _DsReduction | None = None
260- colorbar : bool | str | None = "auto"
261- colorbar_params : dict [str , object ] | None = None
262274 # Multi-panel color: when set, this render entry belongs to the panel identified by this
263275 # color key. ``None`` means the entry is shared across every panel (e.g. a background layer).
264276 panel_key : str | None = None
265277
266278
267- @dataclass
268- class PointsRenderParams :
279+ @dataclass ( kw_only = True )
280+ class PointsRenderParams ( RenderParams ) :
269281 """Points render parameters."""
270282
271283 cmap_params : CmapParams
272- element : str
273284 color : Color | None = None
274285 col_for_color : str | None = None
275286 groups : str | list [str ] | None = None
@@ -278,42 +289,34 @@ class PointsRenderParams:
278289 size : float = 1.0
279290 transfunc : Callable [[float ], float ] | None = None
280291 method : str | None = None
281- zorder : int = 0
282292 table_name : str | None = None
283293 table_layer : str | None = None
284294 ds_reduction : _DsReduction | None = None
285- colorbar : bool | str | None = "auto"
286- colorbar_params : dict [str , object ] | None = None
287295 density : bool = False
288296 density_how : Literal ["linear" , "log" , "cbrt" , "eq_hist" ] = "linear"
289297
290298
291- @dataclass
292- class ImageRenderParams :
299+ @dataclass ( kw_only = True )
300+ class ImageRenderParams ( RenderParams ) :
293301 """Image render parameters."""
294302
295303 cmap_params : list [CmapParams ] | CmapParams
296- element : str
297304 channel : list [str ] | list [int ] | int | str | None = None
298305 palette : ListedColormap | list [str ] | None = None
299306 alpha : float = 1.0
300307 scale : str | None = None
301- zorder : int = 0
302- colorbar : bool | str | None = "auto"
303- colorbar_params : dict [str , object ] | None = None
304308 transfunc : Callable [[np .ndarray ], np .ndarray ] | list [Callable [[np .ndarray ], np .ndarray ]] | None = None
305309 grayscale : bool = False
306310 channels_as_legend : bool = False
307311 method : Literal ["matplotlib" , "datashader" ] | None = None
308312 ds_reduction : _ImageDsReduction | None = None
309313
310314
311- @dataclass
312- class LabelsRenderParams :
315+ @dataclass ( kw_only = True )
316+ class LabelsRenderParams ( RenderParams ) :
313317 """Labels render parameters."""
314318
315319 cmap_params : CmapParams
316- element : str
317320 color : Color | None = None
318321 col_for_color : str | None = None
319322 col_for_outline_color : str | None = None
@@ -328,9 +331,6 @@ class LabelsRenderParams:
328331 table_name : str | None = None
329332 table_layer : str | None = None
330333 transfunc : Callable [[float ], float ] | None = None
331- zorder : int = 0
332- colorbar : bool | str | None = "auto"
333- colorbar_params : dict [str , object ] | None = None
334334 # Fast mode: render each label as a single dot at its centroid instead of the mask.
335335 as_points : bool = False
336336 size : float = 1.0 # marker size for as_points (matplotlib scatter ``s``)
@@ -341,11 +341,10 @@ class LabelsRenderParams:
341341 panel_key : str | None = None
342342
343343
344- @dataclass
345- class GraphRenderParams :
344+ @dataclass ( kw_only = True )
345+ class GraphRenderParams ( RenderParams ) :
346346 """Graph render parameters."""
347347
348- element : str
349348 connectivity_obsp_key : str = "spatial_connectivities"
350349 table_name : str | None = None
351350 color : Color | None = None
@@ -363,6 +362,3 @@ class GraphRenderParams:
363362 linestyle : str | Sequence [str ] = "solid"
364363 rasterize : bool = True
365364 include_self_loops : bool = False
366- zorder : int = 0
367- colorbar : bool | str | None = "auto"
368- colorbar_params : dict [str , object ] | None = None
0 commit comments