Hi Leute,
ich suche eine Möglichkeit ein Liniendiagramm in AutoIT zu erstellen, bei dem der y Wert in einer Array gespeichert ist und der x Wert immer regelmäßig aufsteigend ist (0,1,2,3 etc...)
Ich habe ein paar Scripte gefunden, aber entweder waren diese für ein Balkendiagramm oder haben überhaupt gar nicht funktioniert.
Ich wollte euch deshalb fragen, ob ihr eine Möglichkeit kennt das zu realisieren
Fliwatt
Liniendiagramm erstellen
-
- [ gelöst ]
-
Fliwatt -
21. Januar 2013 um 22:12 -
Geschlossen -
Erledigt
-
-
Schaue mal hier rein: http://www.autoitscript.com/forum/topic/10…gdi-line-graphs
Gruß,
UEZ -
Hängt natürlich davon ab, was Du damit machen willst. Eine Möglichkeit ist natrülich noch ExcelChart.
-
Schau dir dazu [ offen ] Grafische Auswertung in Autoit an, besonders das erwähnte rmChart scheint intersant zu sein. Aber auch ohne zusätzliche UDF ist soetwas lösbar,siehe dazu Post #7.
-
Willst du regelmäßige Diagramme erzeugen (Bestimmt durch lineare oder quadratische Funktionen) oder durch eigene Werte (Messergebnisse o.Ä.) bestimmte?
Für funktionale Diagramme (Graphen, Parabeln etc...) habe ich ein fertiges Skript (Gerade nicht hier, editiere ich nachher rein).Für individuelle Werte müsste das leicht anpassbar sein.
Am einfachsten geht das mit GDI oder GDI+, jeweils mit einfachem Line-Drawing.chess
Edit:
Hier noch der Quellcode.
Das Handling ist nicht optimal, aber das liegt daran, dass ich das Skript 20 Mal umgeschrieben habe, um einen Fehler zu beheben, der bis heute existiert.
Ich weiß aber auch nicht, wie ich das fixen soll... :wacko:
Wenn du mal auf die Zeichenzeit achtest, nach so 10 - 15 Zeichendurchgängen, und dann mal mit der ersten Zeitspanne vergleichst...Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <ComboConstants.au3>
#include <GUIListView.au3>
#include <EditConstants.au3>
#include <GUIEdit.au3>$hGUI = GUICreate("CreateAGraph - Version 0.1", 700, 500)
[/autoit] [autoit][/autoit] [autoit]
Dim $hFunctionInput[5], $hFunctionEnable[5], $aCoordinates[500][2]
Dim $asGraphColors[5] = [0x0000FF, 0x00FF00, 0xFF0000, 0xFF00FF, 0x00FFFF]For $iCtrl = 0 To 4
[/autoit] [autoit][/autoit] [autoit]
$hFunctionInput[$iCtrl] = GUICtrlCreateInput("", 20, ($iCtrl * 20) + 100, 180, 20)
$hFunctionEnable[$iCtrl] = GUICtrlCreateCheckbox("", 0, ($iCtrl * 20) + 100, 20, 20)
GUICtrlSetBkColor(-1, $asGraphColors[$iCtrl])
Next$hLogoLabel = GUICtrlCreateLabel("CreateAGraph", 10, 10, 180, 40)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 20)
$hNameLabel = GUICtrlCreateLabel("chesstiger", 10, 50, 180, 20)
GUICtrlSetFont(-1, 10)
$hFireButton = GUICtrlCreateButton("Zeichnen", 0, 200, 200, 30)
$hListView = GUICtrlCreateListView("", 0, 260, 200, 100)
$hComboBox = GUICtrlCreateCombo("", 0, 240, 200, 40, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "Funktion 1|Funktion 2|Funktion 3|Funktion 4|Funktion 5", "Funktion 1")
$hGraphic = GUICtrlCreateGraphic(200, 0, 500, 500)
$hLogEdit = GUICtrlCreateEdit("", 0, 370, 200, 130)
_ClearGraphic($hGraphic)
$hGlider = _DrawGlider()
_DrawScale($hGraphic)GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
While 1
$iMsg = GUIGetMsg()
Switch $iMsg
Case -3
Exit
Case $hFireButton
_ReleaseGlider($hGlider)
_ClearGraphic($hGraphic)
$hTimerDrawAll = TimerInit()
_ConsoleWrite("Drawing started..." & @CRLF & @CRLF)
For $i = 0 To 4
$hTimerDrawSingle = TimerInit()
If GUICtrlRead($hFunctionEnable[$i]) = 1 Then
_CreateGraph(GUICtrlRead($hFunctionInput[$i]), $asGraphColors[$i])
_ConsoleWrite("Graph " & $i & " enabled." & @CRLF & @TAB & "Time: " & Round(TimerDiff($hTimerDrawSingle), 4) & " ms" & @CRLF)
Else
_ConsoleWrite("Graph " & $i & " disabled." & @CRLF & @TAB & "Time: " & Round(TimerDiff($hTimerDrawSingle), 4) & " ms" & @CRLF)
EndIf
Next
_DrawScale($hGraphic)
$hGlider = _DrawGlider()
_ConsoleWrite("Drawing ended!" & @CRLF & "Time (All): " & Round(TimerDiff($hTimerDrawAll), 4) & " ms" & @CRLF)
Case $hComboBox
_LoadListView()
EndSwitch
WEndFunc _CreateGraph($sFunction, $iColor)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, 0, 250 - Execute(StringReplace($sFunction, "X", -250 / 10) )*10, 0)
GUICtrlSetGraphic($hGraphic, $GUI_GR_COLOR, $iColor)
For $iX = -250 To 250 Step 1
$iY = Execute(StringReplace($sFunction, "X", $iX /10))
$iRet = GUICtrlSetGraphic($hGraphic, $GUI_GR_LINE, $iX + 250, 250 - $iY * 10)
Next
GUICtrlSetGraphic($hGraphic, $GUI_GR_REFRESH)
EndFunc ;==>_CreateGraphFunc _ClearGraphic(ByRef $hGraphic)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlDelete($hGraphic)
$hGraphic = GUICtrlCreateGraphic(200, 0, 500, 500)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetGraphic($hGraphic, $GUI_GR_PENSIZE, 3)
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, 100, 100)
EndFunc ;==>_ClearGraphicFunc _CreateArrayFromFunction($sFunction)
[/autoit] [autoit][/autoit] [autoit]
Dim $aCoordinates[501][2]
For $iX = -250 To 250 Step 1
$iY = Execute(StringReplace($sFunction, "X", $iX / 10))
$aCoordinates[($iX+250)][0] = $iX / 10
$aCoordinates[($iX+250)][1] = $iY
Next
Return $aCoordinates
EndFunc ;==>_CreateArrayFromFunctionFunc _LoadListView()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlDelete($hListView)
$hListView = GUICtrlCreateListView("", 0, 260, 200, 100)
_GUICtrlListView_AddColumn($hListView, "X", 50)
_GUICtrlListView_AddColumn($hListView, "Y", 129)
$iFunction = StringTrimLeft(GUICtrlRead($hComboBox), 9)
$aCoordinates = _CreateArrayFromFunction(GUICtrlRead($hFunctionInput[$iFunction - 1]))
_GUICtrlListView_AddArray($hListView, $aCoordinates)
EndFunc ;==>_LoadListViewFunc _ConsoleWrite($sText)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($hLogEdit, GUICtrlRead($hLogEdit) & $sText)
_GUICtrlEdit_LineScroll($hLogEdit, 0, _GUICtrlEdit_GetLineCount($hLogEdit))
EndFunc ;==>_ConsoleWriteFunc _DrawScale($hGraphic)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetGraphic($hGraphic, $GUI_GR_PENSIZE, 2)
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, 250, 0)
GUICtrlSetGraphic($hGraphic, $GUI_GR_COLOR, 0x000000)
;Hauptgitter
GUICtrlSetGraphic($hGraphic, $GUI_GR_LINE, 250, 500)
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, 0, 250)
GUICtrlSetGraphic($hGraphic, $GUI_GR_LINE, 500, 250)
;Skalierungsstriche
GUICtrlSetGraphic($hGraphic, $GUI_GR_PENSIZE, 1)
GUICtrlSetGraphic($hGraphic, $GUI_GR_COLOR, 0x000000)
For $i = 0 To 50
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, 245, $i * 10)
GUICtrlSetGraphic($hGraphic, $GUI_GR_LINE, 255, $i * 10)
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, $i * 10, 245)
GUICtrlSetGraphic($hGraphic, $GUI_GR_LINE, $i * 10, 255)
Next
;Refresh
GUICtrlSetGraphic($hGraphic, $GUI_GR_REFRESH)
EndFunc ;==>_DrawScaleFunc _DrawGlider()
[/autoit] [autoit][/autoit] [autoit]
$hGraphic = GUICtrlCreateGraphic(200, 0, 500, 500)
GUICtrlSetGraphic($hGraphic, $GUI_GR_PENSIZE, 1)
GUICtrlSetGraphic($hGraphic, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($hGraphic, $GUI_GR_COLOR, 0x000000)
;Glider
For $iY = 0 To 500 Step 10
For $iX = 0 To 500 Step 10
GUICtrlSetGraphic($hGraphic, $GUI_GR_PIXEL, $iX, $iY)
Next
Next
GUICtrlSetGraphic($hGraphic, $GUI_GR_REFRESH)
Return $hGraphic
EndFunc ;==>_DrawGliderFunc _ReleaseGlider($hGraphic)
[/autoit]
GUICtrlDelete($hGraphic)
EndFunc -
Ich habe mir mal die Variante aus dem Thread von progandy herausgesucht, jedoch verstehe ich noch nicht, wie ich dort meine Werte einfüge,
immer wenn ich etwas in der Dim verändere, kommen skurrile Werte heraus.
Wie muss ich die Variable anpassen und was bedeuten die beiden Werte?
Benutzung für das Programm:
Ich habe verschiedene Nutzungszeiten eines Computers pro Session und will diese grafisch darstellen.
Fliwatt -
Nimmt sich nichts. Schon sehr oft benutzt, mit guten Ergebnissen. Beispiele sind dabei wenn ich nicht irre. (Ich irre mich. Sie ist aber sehr einfach zu verwenden). Ich empfehle dir die nicht-GDI+ Version. Am Ende ist das Programm kleiner und Graphics sind auch für diesen Zweck gemacht ^^:
[Blockierte Grafik: http://1.2.3.9/bmi/www.autoitscript.com/forum/uploads/monthly_10_2009/post-29091-12554827927848_thumb.jpg][Blockierte Grafik: http://1.2.3.11/bmi/www.autoitscript.com/forum/uploads/monthly_10_2009/post-29091-12554841977305_thumb.jpg]
-
Danke minx,
[autoit]
ich benutze jetzt die NON-GDI Variante von dem Script, jedoch habe ich es noch nicht so recht verstanden:
Wie füge ich jetzt meinen Graphen ein und wie bekomme ich es hin, dass an den Achsen Markierungen sind, muss ich das von Hand mit Labels machen?
Code bis jetzt:
[/autoit]
#include <GUIConstants.au3>
#include "Graph UDF.au3"
#Include <File.au3>
FileWrite("a.txt",Random(1,30,1) & @CRLF & Random(1,30,1) & @CRLF & Random(1,30,1)) ; Nur fürs Testen des Scripts
Local $array[_FileCountLines("a.txt")]
_FileReadToArray("a.txt",$array)
$Gui = GUICreate("Graf der Parabel",600,600)
GUISetState(@SW_SHOW)
$Graph = _Graph_Create(0,0,590,590)
While 1
If GUIGetMsg($Gui) = $GUI_EVENT_CLOSE Then Exit
sleep(100)
WEnd
Fliwatt -
Hier, ich habe dir mal ein kleines Tut gebastelt:
Graph Tutorial
[autoit]#include <Graph UDF.au3>
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Sinuskurve", 800, 600); GUI Erstellen
[/autoit] [autoit][/autoit] [autoit]
$Graph = _Graph_Create(50,50,700,500); Damit erstellen wir eine Zeichenfläche;_Graph_SetRange_X(ByRef $aGraphArray,$iLow,$iHigh,$iXTicks = 1,$bLabels = 1,$iRound = 0)
[/autoit] [autoit][/autoit] [autoit]; Jetzt setzen wir den Maßstab der x-Achse. Sagen wir mal von -5 bis +5
[/autoit] [autoit][/autoit] [autoit]; Mit dem 4. Paramter wird eingestellt, wie viele Beschriftungen es geben soll. 10 reichen hier aus, also
[/autoit] [autoit][/autoit] [autoit]
; in Einer-Schritten.; Der 5. Paramter wird von uns auf True, also 1 gesetzt, damit die UDF automatisch die Striche beschriftet
[/autoit] [autoit][/autoit] [autoit]; Der letzte Paramter gibt die Nachkommastellen der Beschriftung an. Wir brauchen keine, also setzen wir sie auf 0.
[/autoit] [autoit][/autoit] [autoit]_Graph_SetRange_X($Graph, -5, 5, 10, 1, 0)
[/autoit] [autoit][/autoit] [autoit]; Das gleiche für die y-Achse. Nur hier wollen wir im Bereich von -2 bis 2 darstellen
[/autoit] [autoit][/autoit] [autoit]_Graph_SetRange_Y($Graph, -2, 2, 4, 1, 0)
[/autoit] [autoit][/autoit] [autoit]; Jetzt fügen wir noch Linien hinzu, die als Orientierung fungieren:
[/autoit] [autoit][/autoit] [autoit]
_Graph_SetGrid_X($Graph)
_Graph_SetGrid_Y($Graph); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[/autoit] [autoit][/autoit] [autoit]; Jetzt zeichnen wir mal die Kurve.
[/autoit] [autoit][/autoit] [autoit]; Wir setzen unseren Stift bei x = -5 und y = 0 an:
[/autoit] [autoit][/autoit] [autoit]
_Graph_Plot_Start($Graph, -5, 0); Jetzt zeichnen wir in Schritten:
[/autoit] [autoit][/autoit] [autoit]
For $x = -5 To 5 Step 0.05; Der Step-Wert ist die Auflösung
_Graph_Plot_Line($Graph, $x, Sin($x))
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]While GUIGetMsg()<>-3
[/autoit]
WEnd