SVG Plots formatieren

Begonnen von beaune, 15 Mai 2021, 14:35:25

Vorheriges Thema - Nächstes Thema

beaune

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.

LuckyDay

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

rudolfkoenig

Das ist der Grund, warum ich nicht mehr als 2 Achsen mag :)

beaune

 ;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
ZitatDragging 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?

rudolfkoenig

Die Beschreibung oben gilt fuer den Style f18.
Man muss diese erst auswaehlen, und danach nochmal auf Select style klicken, dann erscheinen die Optionen.

beaune

#5
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.

rudolfkoenig

ZitatVielleicht 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.

beaune

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...

rudolfkoenig

ZitatZeile 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?

beaune

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.

rudolfkoenig

Zitatnomirror 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.

beaune

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  ;)?

beaune

Muß meine Anfrage zurück ziehen... mit Update auf den neuen Stand geht nomirror doch.

Danke Rudi für den Tipp!

beaune

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 y3tics
Da 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.


rudolfkoenig

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.