gb.chart Daten ?

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

gb.chart Daten ?

Beitrag von yoda » Do 30. Jan 2025, 05:58

Moin,

Im Bambasbuch Beispiel werden die Diagrammwerte vorgegeben.
gambas code
Private Sub GenerateChart()

    Dim hChartData1, hChartData2, hChartData3, hChartData4 As ChartDatas

'-- Settings the function values of the single data series
'-- Einstellungen der Funktionswerte der einzelnen Datenreihen
    hChartData1 = ChartDatas("2018", [1.0, 2, 3, 4, 5, 4.2])
    hChartData2 = ChartDatas("2019", [1.2, 2.3, 3.4, 4.5, 5.3, 3.5])
    hChartData3 = ChartDatas("2020", [1.3, 2.4, 3.5, 4.2, 4.9, 3.8])
    hChartData4 = ChartDatas("2021", [1.1, 2.2, 3.1, 4.3, 4.6, 4])
    
    hChart.Datas = [hChartData1, hChartData2, hChartData3, hChartData4]
    
Aber wie stelle ich es an wenn die Daten aus einer sqlite3 Datenbank kommen ?
Ich möchte für jeden Tag des Monats zwei Werte anzeigen.
gambas code
' Höchste Temperatur lesen
query = "SELECT MAX(CAST(temperatur AS REAL)) AS maxTemp FROM stockwaage WHERE  mon = 1 AND jahr = 2025"
hResult = $hConn.Exec(query)
       While (hResult.Available)

          ??????????????????????
           hResult.MoveNext()
       Wend
' Niedrigste Temperatur lesen
query = "SELECT MIN(CAST(temperatur AS REAL)) AS maxTemp FROM stockwaage WHERE  mon = 1 AND jahr = 2025"
hResult = $hConn.Exec(query)
       While (hResult.Available)

          ??????????????????????
          hResult.MoveNext()
       Wend


Lg Dirk

yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von yoda » So 2. Feb 2025, 07:08

Moin,

mein Code sieht so aus
ich bekomme die Fehlermeldung Null Objekt bei hChart.Datas.Add(ChartDatas(z, [ma, mi])) in Public Sub rechnemaTemp()
gambas code
Public Sub rechnemaTemp()
   Dim $hConn As New Connection
   Dim hResult As Result
   Dim query As String
   Dim maxtag As Integer
   Dim z As Integer
   Dim ltmon As String
   Dim ma As Variant
   Dim mi As Variant
   
   If (ComboBoxTmpMon.Index < 0) Then 
                        maxtag = 1
       Else 
                        maxtag = ComboBoxTmpMon.Index    
   Endif
   If (maxtag > 11) Then maxtag = 11
   
   With $hConn
    .Type = "sqlite3" ' ' wird im Original aus dem Form geholt.
    .Host = "/home/" & user.Name & "/" & "mienimmen"' ohne Dateiname !"
    .Name = "" & FMain.myordner & ".sqlite3"  
     End With
   db.Debug = False
   $hConn.Open  
   ltmon = ComboBoxTmpMon.Text
   If ltmon = "" Then ltmon = "1" 
      
       For z = 1 To tar[maxtag]
       Print "tag:" & z
      ' query = "SELECT MAX(CAST(feld2 AS REAL)) AS maxTemp FROM stockwaage WHERE  mon = ? AND jahr = ?"
       query = "SELECT MAX(feld2) AS maxTemp,MIN(feld2) AS minTemp  FROM stockwaage WHERE  mon = '" & ltmon & "' AND jahr = '" & ComboBox3.Text & "'  and tag ='" & z & "'"
       hResult = $hConn.Exec(query)
       While (hResult.Available)
          Print "max:" & hResult!maxTemp & "min:" & hResult!minTemp
          ma = hResult!maxTemp
          mi = hResult!minTemp  
          If ma = "" Then ma = "0"' nicht jeder Tag enthält Temp werte
          If mi = "" Then mi = "0"
          hChart.Datas.Add(ChartDatas(z, [ma, mi]))
          hResult.MoveNext()
       Wend
      
    Next
   
   $hConn.Close      
   GenerateChart()
End

Private Sub GenerateChart()

      Dim hChartData1, hChartData2, hChartData3, hChartData4 As ChartDatas
      Dim m1, m2, m3, m4 As ChartDatas
'-- Settings the function values of the single data series
'-- Einstellungen der Funktionswerte der einzelnen Datenreihen
    ' hChartData1 = ChartDatas("2018", [1.0, 2, 3, 4, 5, 4.2])
   '  hChartData2 = ChartDatas("2019", [1.2, 2.3, 3.4, 4.5, 5.3, 3.5])
   '  hChartData3 = ChartDatas("2020", [1.3, 2.4, 3.5, 4.2, 4.9, 3.8])
   '  hChartData4 = ChartDatas("2021", [1.1, 2.2, 3.1, 4.3, 4.6, 4])
    
    ' hChart.Datas = [hChartData1, hChartData2, hChartData3, hChartData4]
     ' hChart.Datas = [hChartData1]
     '  hChart.Datas.Add(ChartDatas("m1", [12, 5]))
    ' hChart[0].Text = "m1"
   '  hChart[0].values = [12, 0]
    'hChart.Datas.
'-- Setting essential properties  
'-- Festlegen wesentlicher Eigenschaften
    hChart.SetStyle("Bar")
    hChart.AutoScale = True
    hChart.Border = True    
    
'-- Chart-Legend
    hChart.Legend.Position = Align.Right
    hChart.Legend.Visible = True
    hChart.Legend.Title = "Legend"
    
'-- Setting the arguments for the Legend
'-- Festlegen der Argumente für die Legende
    hChart.Labels = ["A_12", "P_04", "H_53", "K_74", "P_92", "M_16"]
    
'-- Chart-Caption    
'-- Diagramm-Beschriftung
    hChart.Title.Text = "Temperaturen im Monat " & ComboBoxTmpMon.text
    hChart.Title.Font.Name = "Monospace"
    hChart.Title.Visible = True

'-- Specifying colors for the individual data rows instead of the default colors
'-- Festlegen von Farben für die einzelnen Datenzeilen anstelle der Standardfarben
    hChart.Colors = [&hff6f00, &h800080, &h7da647, &hA0A0A0, &hFF3F3F, &h290099]

    With hChart
      .Style!Y_AutoScale = True
      .Style!Y_Step = 1
      .Style!Y_Font = Font["Monospace,+2"]
      .Style!ShowValues = True
      .Style!Y_Pattern = "0.0"
      .Style!Y_Label = "Temperaturen"
      '----------------------------------------------------------------------------------
      .Style!X_Label = "Monate"
      .Style!X_Font = Font["Arial,+2"]
      '----------------------------------------------------------------------------------
      .Style!Padding = 10
      .Style!BarFont = Font["Monospace, 9"]
      .Style!Border = False ' 
      .Style!ShowArrows = True
      .Style!ShowInterlines = True
      .Style!InterlinesColor = Color.Lighter(Color.Blue)
      .Style!BarWidth = 0.9
      .Style!SeriesPadding = 1.3
    End With    
    
    DrawingAreaTmp.Refresh()
    
End
Lg Dirk

Bonus
Foriker
Beiträge: 165
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Bonus » So 2. Feb 2025, 12:52

was ist hChart.Datas ? Ich sehe „Datas“ im Wiki nicht als Eigenschaft

https://gambaswiki.org/wiki/comp/gb.chart/chart
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)

Crabman
Foriker
Beiträge: 226
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Crabman » So 2. Feb 2025, 19:28

Moin

Bonus:
Die Eigenschaft Chart.Datas gibt es nur im Projekt 1 im Gambas-Buch: https://gambas-buch.de/doku.php?id=k23: ... rt&s[]=bar
Dort wurde die Klasse Chart in modifizierter Form als Quellcode verwendet, weil sie Fehler hat, die bisher nicht beseitigt wurden.
Dort taucht auch die Klasse ChartDatas auf, die es nicht in gb.chart gibt.

Dirk:
Was ist eigentlich das Problem? Wenn ein Objekt Null ist, dann sollte man doch schnell heraus bekommen welches Objekt das ist.
In der betroffenen Zeile gibt es vier. Da ich im zitierten Code keine Deklaration von hChart finden kann, würde ich zunächst einmal darauf tippen. Im Fehlermodus (Zeile wurde von der IDE als fehlerhaft markiert) lassen sich Objekte überprüfen, indem man sie mit der Maus markiert. Die IDE zeigt einem dann den Inhalt an - oder auch Null.

Viele Grüße
Crabman

Bonus
Foriker
Beiträge: 165
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Bonus » So 2. Feb 2025, 21:16

Aah, ich verstehe, danke.

Datas ist nur ein Array und wird im _new nicht initialisiert

Ändern Sie Zeile 10 in Chart.class, um das Array zu initialisieren gambas code

Property Datas As ChartDatas[] Use $aDatas = []
'

Das Beispiel macht es im Code gambas code

    hChart1.Datas = [ChartDatas("", [-16, -12.1, -6, -1, 5, 14, 35.7, 22.2, 13, 3, -6, -9])]
'
Wie jedes Array müssen Sie es initialisieren, bevor Sie die .Add()-Methode verwenden können
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)

yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von yoda » Di 4. Feb 2025, 18:59

Moin,
Crabman hat geschrieben:
So 2. Feb 2025, 19:28

Die Eigenschaft Chart.Datas gibt es nur im Projekt 1 im Gambas-Buch: https://gambas-buch.de/doku.php?id=k23: ... rt&s[]=bar
Dort wurde die Klasse Chart in modifizierter Form als Quellcode verwendet, weil sie Fehler hat, die bisher nicht beseitigt wurden.
Dort taucht auch die Klasse ChartDatas auf, die es nicht in gb.chart gibt.
Aahh ok, ich hatte das benutzt weil ich Fehler bekomme siehe viewtopic.php?t=6069 wenn ich gb.chart aktiviere. Die Klasse geht dann also nur für das Balkendiagramm ?

Lg Dirk

Crabman
Foriker
Beiträge: 226
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Crabman » Di 4. Feb 2025, 21:26

Moin Dirk
Bei den Problemen mit der Komponente ging es nicht um Fehlermeldungen. Wie man im Gambas-Buch ab Kapitel 23.8.0 sehen kann, gibt es dort funktionierende Beispiele für die Anwendungsfälle
1. Linien-Diagramm
2. Balken-Diagramm
3. Kreis-Diagramm
Nur die Projekte für Anwendung 2 und 3 verwenden den Quellcode der gb.Chart-Komponente und z.T. spezielle Klassen für die jeweilige Anwendung.

Ob die Anwendung der Klassen in Form von Quellcode bei Dir erforderlich ist, bzw sie zu Deiner Anwendung passen, musst Du selbst beurteilen. Fehlermeldungen sind eher einer ungeeigneten bzw. fehlerhaften Anwendung der Klassen zuzuordnen.

Du sprichst von Problemen beim "Aktivieren von gb.Chart". Der unter viewtopic.php?t=6069 beschriebene Fehler hat aber nichts mit dem Aktivieren von gb.Chart zu tun. Was genau meinst Du?

Wenn ich die Komponente gb.Chart unter Gambas 3.19.5 bei mir in der IDE aktiviere und zwei Zeilen in das Programm einfüge ...

Dim hChart as Chart
hChart = New Chart

... dann bekomme ich keine Fehlermeldung. Wenn ich das Gleiche mit dem Master mache, bekomme ich einige Warnungen in der IDE-Konsole, die mir nicht gefallen (circular references), aber die App bricht nicht mit einer Fehlermeldung ab. Welche Gambas-Version und welches Betriebssystem verwendest Du?

Viele Grüße
Crabman

yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von yoda » Mi 5. Feb 2025, 05:58

Moin,
Bonus hat geschrieben:
So 2. Feb 2025, 21:16
Aah, ich verstehe, danke.

Datas ist nur ein Array und wird im _new nicht initialisiert

Ändern Sie Zeile 10 in Chart.class, um das Array zu initialisieren gambas code

Property Datas As ChartDatas[] Use $aDatas = []
'

Das Beispiel macht es im Code gambas code

    hChart1.Datas = [ChartDatas("", [-16, -12.1, -6, -1, 5, 14, 35.7, 22.2, 13, 3, -6, -9])]
'
Wie jedes Array müssen Sie es initialisieren, bevor Sie die .Add()-Methode verwenden können
Danke für den Tipp. Ich hab das auf die schnelle mal gemacht. Nun wird etwas angezeigt aber ohne Balken.
Ich habe die Felder die in der Datenbank leer sind erst mal auf 0 gesetzt um Fehler zu vermeiden, ist nicht richtig denn es gibt ja auch minus bzw. Null Werte.
Wie verhindere ich einen Fehler wen die Datenbankfelder keinen Inhalt haben ?

Lg Dirk

yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von yoda » Mi 5. Feb 2025, 06:03

Moin,
Crabman hat geschrieben:
Di 4. Feb 2025, 21:26
Moin Dirk
Bei den Problemen mit der Komponente ging es nicht um Fehlermeldungen. Wie man im Gambas-Buch ab Kapitel 23.8.0 sehen kann, gibt es dort funktionierende Beispiele für die Anwendungsfälle
1. Linien-Diagramm
2. Balken-Diagramm
3. Kreis-Diagramm
Nur die Projekte für Anwendung 2 und 3 verwenden den Quellcode der gb.Chart-Komponente und z.T. spezielle Klassen für die jeweilige Anwendung.

Viele Grüße
Crabman

Wenn ich Damit auch Linien-Diagramm hinkriege ist das ok für mich.

Ich hab es allerdings nicht geschafft mit hChart.SetStyle("") auf Linien umzustellen.

Lg Dirk

Crabman
Foriker
Beiträge: 226
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Crabman » Mi 5. Feb 2025, 12:17

chart-line.club_0.0.1.tar.gz
(13.93 KiB) 36-mal heruntergeladen
Anbei eine Minidemo als Diskussionsgrundlage für die Liniendiagramm-Anwendung von gb.Chart. Es ist zum Plotten einer Temperatur über die Tageszeit ausgelegt. Wenn x/y-Koordinatenwerte fehlen, dann lässt man sie einfach weg. Sind Werte nur bis zu einer Tageszeit < 24:00 Uhr verfügbar, dann wird die X-Achse nur bis dorthin angezeigt.

Oder willst Du die Temperatur über Kalendertage darstellen? Für welche Zeitpunkte hast Du Temperaturen verfügbar?

Leider fehlt bei Liniendiagrammen mit gb.Chart die Beschriftung der Achsen (z.B. "Temp. in °C" für die Y-Achse, bzw "Uhrzeit" für die X-Achse. Vielleicht hat jemand eine Lösung dafür.

VG, Crabman

yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von yoda » Mi 5. Feb 2025, 19:00

Hi,

danke für die Demo ich werd es mit anschauen. In meinem Projekt habe ich eine Bienen Stockwaage https://honey-pi.de mit einen Raspi.
Dieser sendet alle 15 Minuten Gewicht Temperatur etc. nach https://thingspeak.mathworks.com. Diese Daten habe ich in einer Sqlite Datenbank.
Nun möchte ich in der Monatsansicht für jeden Tag die Maximale und Minimale Temperatur als Balken anzeigen.

Die zweite Grafik ist die Milbenbelastung des Bienenvolks auch Monat oder Tag als Linie. Hier gibt es nur einen Wert (Linie)
Mit einer Zweiten Linie soll der Schwellwert angezeigt werden wo es für das Volk Kritisch wird. Also ein fester Wert.

In beiden Fällen stehen nicht an jeden Tag Werte in der Tabelle

Lg Dirk

Crabman
Foriker
Beiträge: 226
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Crabman » Do 6. Feb 2025, 11:47

Die Max- und Min-Temperaturen als Balken darzustellen halte ich für fragwürdig. Wie soll das aussehen, wenn negative Temperaturen auftreten können? Sollen die Min.- und Max.-Balken nebeneinander stehen? Vielleicht schaust Du dir mal an, wie die maximale und minimale Lufttemperatur bei Wetterdiensten typischerweise angezeigt wird. Das wäre in Bezug auf gb.Chart eine andere Lösung und u.a. auch als Liniendiagramm realisierbar.
VG, Crabman

yoda
Moderator
Beiträge: 644
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Nörten-Hardenberg
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von yoda » Sa 8. Feb 2025, 07:34

Moin,

jaaah jetzt wo du es sagst, mit Minus ist das schwierig. bei https://www.wetter.com/ hab ich ein Bild gefunden

https://www.wetter.com/wetter_aktuell/w ... 07138.html

Die machen da beides.
Ich wollte für jeden Tag zwei Balken haben. Wenn gb.chart das mit den negativ Werten nicht kann dann halt Linien

Lg Dirk

Crabman
Foriker
Beiträge: 226
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Crabman » Sa 8. Feb 2025, 14:44

Säulen mit negativen Werten sind im Beispiel https://gambas-buch.de/doku.php?id=k23: ... .8.2:start umgesetzt, aber da ist nur eine Säule vorhanden.
Schaut man sich das zweite Beispiel mit mehreren Säulen an, dann kommen Zweifel, ob die gewünschte Säulen-Darstellung überhaupt mit den Klassen möglich ist, denn dort wird pro X-Wert ein Eintrag in der Legende angezeigt. 31 Legendeneinträge für einen Monate ergäbe keinen Sinn.
Ich habe weder das Programm geschrieben noch die Klassen geschrieben bzw. modifiziert und sehe aktuell keine Lösung für Deinen Anwendungsfall. Ich habe eine interne Rückfrage gestellt und würde mich bei Neuigkeiten melden. Bis dahin empfehle ich über
- ein Liniendiagramm mit gb.chart oder
- die Anwendung von GnuPlot nachzudenken.
Natürlich könntest Du Dir auch eine eigene Klasse für Deinen Anwendungsfall schreiben, was aber ein Projekt für sich wäre.
VG, Crabman

Crabman
Foriker
Beiträge: 226
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: gb.chart Daten ?

Beitrag von Crabman » Sa 8. Feb 2025, 17:31

Die interne Rückfrage hat den notwendigen Anstoß gegeben. Anbei eine modifizierte Version des Beispiels aus dem Gambas-Buch.
Die Ausgabe sieht so aus:
Bildschirmfoto vom 2025-02-08 17-09-40.png
Bildschirmfoto vom 2025-02-08 17-09-40.png (39.67 KiB) 725 mal betrachtet
Eine Referenz-LInie ließe sich sicher auch noch einbauen, aber Du solltest erst einmal überlegen, ob Du wirklich zwei parallele Balken pro Tag haben möchtest. Für das Ausblenden fehlender Werte ist mir aktuell auch nur das Setzen auf Null eingefallen.
Im Programm ist schon das Setzen des Jahres und des Monats enthalten. Die Anzahl der Tage des gewünschten Monats wird berechnet und berücksichtigt.
VG, Crabman
Dateianhänge
chart.bar.multi_mod-5.2.3.tar.gz
(44.88 KiB) 30-mal heruntergeladen

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast