Min/Max/Last in Legende bei mehreren Linien

Begonnen von ocin4, 20 August 2022, 23:35:38

Vorheriges Thema - Nächstes Thema

ocin4

Hallo,

ich hab einen SVG-Plot, in dem aktuell 8 Temperaturen dargestellt werden. Mir würde gefallen, wenn die Max-/Min-/Last-Werte nicht nur im Tootip sondern in direkt in der Legende dargestellt werden können. Für einen Wert bekomm ich das über das attr "label" hin, für den zweiten könnte ich evtl. noch "title" missbrauchen, aber für die restlichen 6 Werte bekomm ich da nicht hin. $data{min1} funktioniert im Label nicht.

[Anmerkung nebenbei zu uneinheitlicher Bezeichnung: im gplot-File steht "title" als Beschriftung der Legende, im SVG-Editor steht "Diagram label, Source", das macht die Suche nach Lösungen im Netz auch schwieriger...]

Gibt's eine Möglichkeit, mehrzeilige Legenden mit Werten zu füllen?

Hier das gplot-File:

# Created by FHEM/98_SVG.pm, 2022-08-20 23:23:56
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Temperatur'
set ytics
set y2tics
set grid ytics y2tics
set ylabel ""
set y2label ""

#fhemDbLog MQTT2_inFactory_TH_42:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_248:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_251:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_153:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_154:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_16:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_52:temperature_C::
#fhemDbLog MQTT2_inFactory_TH_6:temperature_C::

plot "<IN>" using 1:2 axes x1y1 title '<L1>' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title '"Wäscheboden: Min $data{min1}, Max $data{max1}, Last $data{currval1}"' ls l6 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Arbeitszimmer' ls l5 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'WC oben' ls l7 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Schlafzimmer' ls l3 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Küche' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Wohnzimmer' ls l8 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Keller' ls l0 lw 1 with lines


Danke im Voraus!
Nico

OdfFhem

@ocin4

Das Attribut "label" ist deprecated, sollte also eher nicht mehr genutzt werden - stattdessen das Attribut "plotReplace".

Definition beispielhafter Platzhalter T,L1,L2 im plotReplace-Attribut

attr SVG_irgendwas plotReplace L1={"#1 ... $data{min1}"} L2={"#2 ... $data{max2}"} T={"#1 ... $data{min1} --- #2 ... $data{max2}"}

Die Namen der Platzhalter sind frei wählbar.
Neben Perl-Blöcken können Platzhalter auch reinen Text festlegen ... T="nur ein Titeltext"

Verwendung der beispielhaften Platzhalter T,L1,L2 in der .gplot-Datei

set title '<T>'

plot "<IN>" using 1:2 axes x1y2 title '<L1>' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '<L2>' ls l2 lw 1 with steps

ocin4

Super Sache, das hat funktioniert. Danke!

betateilchen

Zitat von: OdfFhem am 21 August 2022, 10:28:33
Die Namen der Platzhalter sind frei wählbar.

... fast frei wählbar. Bei TL muss man aufpassen, da können u.U. verwirrende Effekte auftreten.

Außerdem sollte noch darauf hingewiesen sein, dass sowohl <Platzhalter> als auch %Platzhalter% möglich ist.
Damit kann bestimmt werden, WANN der Wert ersetzt werden soll.
Näheres siehe commandref zu SVG.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!