Autor Thema: SVG Plots formatieren  (Gelesen 1226 mal)

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
SVG Plots formatieren
« am: 15 Mai 2021, 14:35:25 »
Hallo,

ich habe zwei Plots, die ich gerne im Dashboard bündig übereinander darstellen möchte. Das geht auch gut, wenn beide Diagramme dieselbe Anzahl von y-Achsen haben, z.B. Temperatur rechts und Feuchtigkeit links.

Jetzt hab ich aber einen Fall, wo ein Diagramm 2 und das andere 4 y-Achsen hat. Prinzipiell ist es ja kein Problem, sowohl links als auch rechts zwei Achsen zu definieren, wenn man die gplot-Datei händisch bearbeitet und das Attribut nrAxis 2,2 setzt. Das Problem ist aber, dass dann das SVG-Diagramm mit den 4 Achsen weiter rechts beginnt und eben nicht mehr bündig zu dem anderen mit den zwei Achsen ist.

Meine Idee war: dann definiere ich einfach immer 4 Achsen, benutze aber nur 1 und 3, und und lasse 2 und 4 "leer". Das geht so halb: man kann einen Achsnamen zum Leerstring setzen, dann wird nichts ausgegeben, und der Platz für die Beschriftung ist dennoch reserviert. Was aber offenbar nicht geht ist, dass keine Skalenwerte angezeigt werden. Es ist dann so, dass für Achse 2 einfach nochmal der Skalenwert von Achse 1 angezeigt wird. Die Anzeige läßt sich zwar durch set y2range... beeinflussen, aber ich hab bislang keinen Weg gefunden, dass nichts angezeigt wird. Hat da jemand einen Tipp?


Oder alternativ: vielleicht ist meine Idee ja auch nicht gut, und es gibt andere Möglichkeiten, die Position des SVG-Diagramms zu beeinflussen, also für alle Diagramme einfach ein Stückchen weiter nach rechts zu schieben. Da hab ich aber auch nichts gefunden.
« Letzte Änderung: 16 Mai 2021, 12:36:08 von beaune »

Offline fhem-hm-knecht

  • Hero Member
  • *****
  • Beiträge: 2387
  • Fhem User seit 2010
Antw:SVG Plots formatieren
« Antwort #1 am: 15 Mai 2021, 16:17:08 »
bei SelectStyle -> Dragging active x
mit der Maus den Plot dahinschieben wo man ihn haben möchte auf dem Bildschirm

bei SelectStyle -> Dragging active x entfernen.

F18
Hary


Odroid HC 1  getrennte Fhem Instanzen HM|INETdienste|Heizung|Bedienoberfläche|TEST -->alles nur noch über MQTT2 und CLIENT --> abgesetzte Pi's über LAN

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #2 am: 15 Mai 2021, 17:16:42 »
Das ist der Grund, warum ich nicht mehr als 2 Achsen mag :)

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #3 am: 15 Mai 2021, 18:01:12 »
 ;D Aber manchmal wenn man viele Informationen auf kleinem Raum darstellen will, ist ne doppelte Achse dann doch besser als ein zusätzliches Diagramm...

Das mit dem
Zitat
Dragging active x
würde ich ja gerne ausprobieren, aber wo finde ich das denn?  Ich sehe bei SelectStyle nur, dass ich einen Style auswählen kann, sonst nix  :-[. Wo muß ich hin?

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #4 am: 15 Mai 2021, 18:14:59 »
Die Beschreibung oben gilt fuer den Style f18.
Man muss diese erst auswaehlen, und danach nochmal auf Select style klicken, dann erscheinen die Optionen.

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #5 am: 16 Mai 2021, 12:35:09 »
Ok, dann kann ich das natürlich nicht finden. Ich nutze aktuell den dark style und schrecke davor zurück, nur wegen einer im Grunde "Formatierungs-Kleinigkeit" den gesamten Style zu wechseln.

Aber mal anders gedacht: Ist mein Weg, immer 4 Achsen zu definieren, nicht auch legtitim? Und ist es nicht sogar ein Fehler, dass für eine nicht genutzte Achse eine Skala als Kopie einer anderen existierenden Skala angezeigt wird? Vielleicht könnte man das einfach fixen... Oder Alternativ könnte man sich auch ein neues fhem-Attribut überlegen, etwas wie "HideScale" gefogt von einer kommagetrennten Aufzählung der Achsen, für die keine Skalenwerte angezeigt werden sollen.

Zur Verdeutlichung hier mein gplot-File:
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 '<L1>'
set ytics
set y2tics

set grid ytics
set ylabel "Humidity (%)"
set y2label ""
set y3Label "Temperature (°C)"

#FileLog_SD_WS07_TH_1 4:SD_WS07_TH_1.temperature\x3a:10:
#FileLog_SD_WS07_TH_1 4:humidity:50:

plot "<IN>" using 1:2 axes x1y3 title 'Measured temperature' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Humidity (%)' ls l2fill lw 1 with lines


Das Ergebnis ist als png angehängt; die linke Skala dürfte eigentlich nicht erscheinen.
« Letzte Änderung: 16 Mai 2021, 12:40:22 von beaune »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #6 am: 16 Mai 2021, 13:26:03 »
Zitat
Vielleicht könnte man das einfach fixen...
Vielleicht.
Da aber ich die Mehrfach-Skalen weder gebaut habe (sie kamen als Patch), noch sie verwende (s.o.) ist meine Motivation das zu tun begrenzt. Ich werde einen passenden Patch uebernehmen, falls die Auswirkungen auf dem Rest begrenzt sind.

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #7 am: 16 Mai 2021, 14:54:44 »
Ok, die Herausforderung nehme ich natürlich gerne an  ;)

Hab mal durch den Quellcode gescrollt und spontan die Zeile gefunden, die für meinen "Bug" zuständig ist:

Zeile 1729 in 98_SVG.pm
$hmin{x1y2}=$hmin{x1y1}, $hmax{x1y2}=$hmax{x1y1} if(!defined($hmin{x1y2})); #smi $conf{"y2label"}
Als Grund für diese Zeile ist kommentiert:
#-- just in case we have only one data line, but want to draw both axes
Das mag sinnvoll sein, aber sicher nicht dann, wenn diese Achse keinen Namen hat. Deshalb würde es meiner Meinung nach reichen, die Zeile wie folgt zu ersetzen und einfach die Bedingung zu erweitern:
  $hmin{x1y2}=$hmin{x1y1}, $hmax{x1y2}=$hmax{x1y1} if((!defined($hmin{x1y2})) and ($conf{'y2label'} ne '""'));
Könntest Du Dich mit diesem Patch "anfreunden"? Funktionieren tuts...

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #8 am: 16 Mai 2021, 20:11:10 »
Zitat
Zeile 1729 in 98_SVG.pm
Die erwaehnte Zeile ist bei mir ca 30 Zeilen weiter Unten, d.h. Du verwendest vmtl. eine alte Version.

Btw. hast du mal versucht, als tics bei den zu versteckenden Achse nomirror zu spezifizieren?

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #9 am: 17 Mai 2021, 09:35:41 »
Stimmt... ich hatte die Änderung in dieser Version vorgenommen:
$Id: 98_SVG.pm 20950 2020-01-12 10:41:37Z rudolfkoenig $

Hab jetzt mal spontan versucht, dieses eine Modul gegen das aktuelle auszutauschen. Das ist allerdings nicht gelungen, da scheint es weitere Abhängigkeiten zu geben, die ich mit aktualisieren müßte. Hab ich jetzt spontan nicht gesehen, was das ist. Hat aber glaube ich für den Patch auch keine Bedeutung.

nomirror hab ich mal versucht, kann aber keinerlei Veränderung feststellen. Was soll denn passieren? Hab leider auch keine Erläuterung dazu gefunden.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #10 am: 17 Mai 2021, 10:47:58 »
Zitat
nomirror hab ich mal versucht, kann aber keinerlei Veränderung feststellen. Was soll denn passieren? Hab leider auch keine Erläuterung dazu gefunden.
Deswegen habe ich die fetten roten Pfeile im Anhang reingemalt, hat offensichtlich nicht geholfen.

Eine Doku zu nomirror findet man in der gnuplot Doku, das stammt aus der Zeit, wo ich Rueckwaertskompatibilitaet mit gnuplot fuer wichtig empfunden habe. Aber SVG implementiert bei weitem  nicht alle gnuplot Optionen, und mit der #FileLog Syntax sind wiederum andere Sachen reingekommen, die gnuplot nicht versteht.

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #11 am: 17 Mai 2021, 10:59:11 »
Die Pfeile hab ich schon verstanden... aber es tut nichts, bei mir bleiben die Achsen vorhanden, auch wenn ich nomirror angebe.

Vielleicht dann doch den Patch einbauen  ;)?

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #12 am: 17 Mai 2021, 12:40:32 »
Muß meine Anfrage zurück ziehen... mit Update auf den neuen Stand geht nomirror doch.

Danke Rudi für den Tipp!

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #13 am: 03 August 2021, 13:48:31 »
Hallo,

ich hab neu neue Anfrage/Anregung zu den SVG-Plots.

Wie oben schon geschildert verwendet ich ja bis zu 4 y-Achsen, zwei links, zwei rechts. Jetzt ist mir aber aufgefallen, dass man Grids nur an die Achsen 1 und 2 koppeln kann. Anweisungen dieser Art haben keinen Effekt:
set grid y3ticsDa ich ja weiß, dass mehr als 2 Achsen hier nicht sehr beliebt sind, hab ich selber mal geschaut, was man dafür ändern müßte. Tatsächlich ist das gar nicht so schlimm; ich hab mal ein paar Zeilen ergänzt, so dass zumindest die Kopplung an Achse 3 geht (das ist die, die bei 4 Achsen rechts neben der Grafik steht, und damit die ist, die am meisten ins Auge fällt). Das geänderte Modul hab ich angehängt, die ergänzten Zeilen sind mit #beaune kommentiert.

Wär das was, was man ins Repository aufnehmen könnte? Ist ja eigetlich ne konsequente Ergänzung, wenn man eh schon mehr als zwei Achsen zulässt.


Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #14 am: 03 August 2021, 16:18:07 »
Waere es nicht ein akzeptabler Workaround, die Achse mit dem Grid als y1 oder y2 zu definieren?
Oder moechte man fuer drei Achsen jeweils waagerechte Linien? Ist die Zeichnung dann nicht ueberfrachtet?

Diese Loesung hinkt etwas, weil man fragen kann, wieso nur fuer die ersten drei und nicht gleich fuer Alle.

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #15 am: 03 August 2021, 17:42:59 »
Der Workaround ist das, was ich bislang gemacht habe, was mich aber nicht zufrieden gestellt hat. Ich erkläre warum.

Zunächst mal ist es völlig richtig, dass es keinen Sinn macht, für jede der y-Achsen Linien darzustellen. Das überfrachtet die Zeichnung ganz sicher. Ich mache daher immer nur ein einziges Grid, was ich an die "wichtigste" Achse hänge. Man muß sich dabei gut überlegen, welche Werte der Anwender sich oft im Detail anschaut, und bei welchen eine grobe Orientierung reicht. Da sich Menschen meist eher nach rechts auf einem Blatt/Bildschirm orientieren, ist von der Position her die Skala rechts von der Zeichnung die wichtigste, die man eben am besten wahrnehmen kann. Nach links schaut man nur, wenn man rechts keine Antwort auf seine Frage findet, und die zweite Achse rechts ist eben schon wieder weiter von der gezeichneten Linie weg. Also muß der wichtigste Wert auf die Achse rechts der Grafik.

Wenn die Achse rechts der Grafik die wichstigste ist, dann sollte man daran auch das Grid koppeln. Wenn man nur zwei Achsen benutzt, dann ist das y2. Geht also. Benutzt man aber 3 oder 4 Achsen, dann teilt man wahrscheinlich 2/2 auf, also 2 links und 2 rechts der Grafik. Dann ist aber y3 die Achse rechts der Grafik, und genau daran konnte man das Grid bislang nicht ausrichten.

Das gilt übrigens genauso für das Eingangsszenario dieses Threads: In den meisten Diagrammen habe ich tatsächlich nur zwei Achsen, aber sobald eines dazu kommt, wo man eine mehr braucht, sind die Diagramme nicht mehr bündig untereinander in einem Dashboard. Daher lege ich ALLE Diagramme mit 4 Achsen an, und benutze oft nur zwei davon. Genau in diesem Szenario ist aber auch wieder y3 die wichtigste.

Ich hab in der angehängten Datei bewußt nur die Implementierung für y3 vorgenommen, einerseits weil ich nur die brauchte, und andererseits weil ich es hier auch übersichtlich halten wollte. Du hast aber völlig recht, dass man konsequenterweise auch das Grid an y4 koppeln können sollte. Das läßt sich ganz genauso lösen, ist nur ein Copy&Paste dessen, was ich für y3 ergänzt habe. Kann ich gerne noch nachliefern wenn gewünscht.

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #16 am: 04 August 2021, 16:01:56 »
Anbei jetzt die Version, mit der man das Grid auch an y4 koppeln kann.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #17 am: 04 August 2021, 16:05:21 »
Seufz. Wollte gerade schreiben, dass ich das uebernehme, aber ich es generisch fuer alle machen will. Und dass es noch ein bisschen dauern kann. Sorry.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24516
Antw:SVG Plots formatieren
« Antwort #18 am: 05 August 2021, 22:48:13 »
Ich habe jetzt eine Version eingecheckt, der das Grid fuer alle Y-Achsen unterstuetzen sollte.
Getestet habe ich es nur mit den ersten zwei Achsen, deswegen bin ich auf Feedback neugierig.

Der SVG-Editor weiss nichts von den Achsen 3 bis 8 (und damit auch von deren Grids nicht), weil das deutlich mehr Aufwand waere.
Im angehaengten Patch war die SVG-Editor Unterstuetzung dieser Grids auch nicht vollstaendig.

Offline beaune

  • Full Member
  • ***
  • Beiträge: 109
Antw:SVG Plots formatieren
« Antwort #19 am: 06 August 2021, 11:12:20 »
Hab es gerade ausprobiert in meiner Anwendung, wo y3 verwendet wird. Ergebnis: geht!

Vielen Dank!

 

decade-submarginal