@@ -483,17 +483,39 @@ def item_json(self, value: str | None) -> None:
483483 def create_merged_label (self ) -> LabelItem | None :
484484 """Create a single merged label from all result adapters.
485485
486+ The label position can be customized per object via metadata options:
487+
488+ - ``result_label_position`` (str, default ``"TL"``): one of PlotPy's
489+ relative positions (``"TL"``, ``"T"``, ``"TR"``, ``"L"``, ``"R"``,
490+ ``"BL"``, ``"B"``, ``"BR"``). Used both as the canvas anchor and as
491+ the label-relative anchor (the same corner of the label is pinned
492+ to the same corner of the plot).
493+ - ``result_label_offset`` (tuple ``(dx, dy)`` or list, default
494+ ``(0, 0)``): pixel offset of the label relative to the anchor.
495+
486496 Returns:
487497 Merged label item, or None if no results
488498 """
489499 if not self .result_adapters :
490500 return None
491501
502+ # Per-object label placement (set via ``obj.set_metadata_option(...)``)
503+ position = self .obj .get_metadata_option ("result_label_position" , "TL" )
504+ offset = self .obj .get_metadata_option ("result_label_offset" , (0 , 0 ))
505+ offset = (int (offset [0 ]), int (offset [1 ]))
506+
492507 # Create the label with merged content
493508 merged_html = resultadapter_to_html (self .result_adapters , self .obj )
494- item = make .label (merged_html , "TL" , ( 0 , 0 ), "TL" , title = "Results" )
509+ item = make .label (merged_html , position , offset , position , title = "Results" )
495510 font = get_font (PLOTPY_CONF , "results" , "label/font" )
496511 item .set_style ("results" , "label" )
512+ # ``set_style`` above re-reads the ``results/label`` config section into
513+ # ``labelparam`` and clobbers anchor/abspos/xc/yc set by ``make.label``.
514+ # Re-apply the requested placement so per-object metadata wins.
515+ item .labelparam .abspos = True
516+ item .labelparam .absg = position
517+ item .labelparam .anchor = position
518+ item .labelparam .xc , item .labelparam .yc = offset
497519 item .labelparam .font .update_param (font )
498520 item .labelparam .update_item (item )
499521
0 commit comments