[PYTHON] Zeichnen Sie ein Diagramm mit der PySimple-Benutzeroberfläche

Was können Sie diesen Artikel lesen

graph_example.jpg

Mit der PySimple-Benutzeroberfläche können Sie:

Informationen zur grundlegenden Funktionsweise von PySimpleGUI finden Sie unter Wenn Sie Tkinter verwenden, versuchen Sie es mit PySimpleGUI.

Überblick

Ich denke, es gibt viele Leute, die Daten analysieren, um Python zu verwenden. Einige Benutzer möchten die Analyseergebnisse möglicherweise auch mit einem Liniendiagramm oder einem Balkendiagramm visualisieren.

Es gibt ungefähr zwei Möglichkeiten, Diagramme mit PySimpleGUI zu verwenden.

-Zeichnen Sie mit graph-element

Dieses Mal werde ich erklären, wie man es mit graph-element erstellt.

Über Graph-Element

graph-element ist eine Klasse, die zum Zeichnen verwendet wird. In tkinter wird mit Canvas gezeichnet, aber das Grafikelement von PySimpleGUI wird durch die Erstellung des Koordinatensystems von Leinwänden einfacher zu verwenden.

Als Grundverwendung Verwenden Sie die Klasse "Graph", um die Größe des Zeichenbereichs, die untere linke Koordinate (Ursprung) des Zeichenbereichs und die obere rechte Koordinate anzugeben.

graph = sg.Graph((500,500), (0,0), (500, 500))

Danach verwenden wir jede Zeichenmethode für dieses Diagramm.

--DrawCircle: Zeichne einen Kreis --DrawLine: Zeichne eine Linie --DrawPoint: Platziere Punkte --DrawRectangle: Zeichne ein Viereck --DrawOval: Zeichne einen Bogen --DrawImage: Bild anzeigen --DrawText: Zeichne Zeichen

Davon werden die folgenden beim Zeichnen von Balkendiagrammen und Kreisdiagrammen verwendet.

--DrawLine: Dient zum Zeichnen von Linien, Hilfslinien und Skalen im Faltliniendiagramm. --DrawPoint: Wird verwendet, um gezeichnete Punkte in einem Faltliniendiagramm zu zeichnen oder um einen Bogen wie eine Sinuswelle zu zeichnen --DrawText: Dient zum Anzeigen von Diagrammbeschriftungen und Werten pro Diagramm

Verwenden Sie auch die folgende Methode.

--Erase: Löscht den Zeichenbereich. Es wird verwendet, um das gezeichnete Diagramm beim Wechseln des Diagramms nicht zu löschen.

Code

Ich werde eine Zusammenfassung des offiziellen Beispielcodes veröffentlichen. Wechseln Sie den Inhalt des Diagramms mit der Schaltfläche

Ausführungsbildschirm graph_example.jpg

Code

import PySimpleGUI as sg
from random import randint
import math
"""
Die folgenden offiziellen Beispiele sind in einem integriert
https://pysimplegui.trinket.io/demo-programs#/graph-element/graph-element-bar-chart
https://pysimplegui.trinket.io/demo-programs#/graph-element/graph-element-sine-wave
https://pysimplegui.trinket.io/demo-programs#/graph-element/graph-element-line-graph-with-labels
https://pysimplegui.trinket.io/demo-programs#/graph-element/animated-line-graph
"""

#Konstante
GRAPH_SIZE = (500, 500)
DATA_SIZE = (500, 500)

# 
PLOTS_NUMBER = 30
RAND_MAX = 400

#Für unterbrochene Linien
LINE_BAR_WIDTH = 10
LINE_BAR_SPACING = 16
LINE_EDGE_OFFSET = 3

#Balkendiagramm
BAR_WIDTH = 50
BAR_SPACING = 75
EDGE_OFFSET = 3

#Grafik zeichnen
SIZE_X = GRAPH_SIZE[0]//2
SIZE_Y = GRAPH_SIZE[1]//2
NUMBER_MARKER_FREQUENCY = 25

#Animation
GRAPH_STEP_SIZE = 5
DELAY = 15  #Zeitintervall

#Layout
#Festlegen des Zeichenbereichs des Diagramms
graph = sg.Graph(GRAPH_SIZE, (0, 0), DATA_SIZE,
                 key='-GRAPH-', background_color='white',)

layout = [[sg.Text('chart demo')],
          [graph],
          [sg.Button('LINE'), sg.Button('chart'), sg.Button('Beide'), sg.Button('Kuchendiagramm'), sg.Button('Sinus'),sg.Button('Animation') ]]

window = sg.Window('Einfaches Diagrammbeispiel', layout)

before_value = 0  #Initialisierung des Liniendiagramms
delay = x = lastx = lasty = 0  #Animationsinitialisierung

is_animated = False


def draw_axis():
    """Zeichnen Sie Hilfslinien auf der X- und Y-Achse

Ursprung unten links im Diagrammelement(0,0)Ist eingestellt als
Bewegen mit der Mitte des Diagrammbereichs als Ursprung
    """

    graph.draw_line((0, SIZE_Y), (SIZE_X*2, SIZE_Y))  #Ursprung
    graph.draw_line((SIZE_X, 0), (SIZE_X, SIZE_Y*2))

    for x in range(0, SIZE_X*2, NUMBER_MARKER_FREQUENCY):
        graph.draw_line((x, SIZE_Y-3), (x, SIZE_Y+3))  #Zeichnen Sie eine Skala
        if x != 0:
            graph.draw_text(str(x-SIZE_X), (x, SIZE_Y-10),
                            color='green')  #Zeichnen Sie den Wert der Skala

    for y in range(0, SIZE_Y*2+1, NUMBER_MARKER_FREQUENCY):
        graph.draw_line((SIZE_X-3, y), (SIZE_X+3, y))
        if y != 0:
            graph.draw_text(str(y-SIZE_Y), (SIZE_X-10, y), color='blue')


while True:

    if is_animated:
        #Regelmäßig'__TIMEOUT__'Ereignis wird ausgegeben
        event, values = window.Read(timeout=DELAY)
    else:
        event, values = window.Read()

    if event is None:
        break

    if event == 'LINE':
        is_animated = False
        #Beschriftetes Faltliniendiagramm anzeigen
        graph.Erase()  #Diagrammanzeige Löschen Sie beide Maschinen

        for i in range(PLOTS_NUMBER):
            graph_value = randint(0, 400)
            if i > 0:
                graph.DrawLine(((i-1) * LINE_BAR_SPACING + LINE_EDGE_OFFSET + LINE_BAR_WIDTH/2,  before_value),
                               (i * LINE_BAR_SPACING + LINE_EDGE_OFFSET + LINE_BAR_WIDTH/2, graph_value), color='green', width=1)

            #Zeigen Sie die gestrichelte Beschriftung an (y-Wert)
            graph.DrawText(text=graph_value, location=(
                i * LINE_BAR_SPACING+EDGE_OFFSET+2, graph_value+10))

            graph.DrawPoint((i * LINE_BAR_SPACING + LINE_EDGE_OFFSET +
                             LINE_BAR_WIDTH/2, graph_value), size=3, color='green',)

            before_value = graph_value

    if event == 'chart':
        is_animated = False

        #Balkendiagramm löschen
        graph.Erase()
        for i in range(PLOTS_NUMBER):
            graph_value = randint(0, 400)
            graph.DrawRectangle(top_left=(i * BAR_SPACING + EDGE_OFFSET, graph_value),
                                bottom_right=(i * BAR_SPACING + EDGE_OFFSET + BAR_WIDTH, 0), fill_color='blue')
            graph.DrawText(text=graph_value, location=(
                i*BAR_SPACING+EDGE_OFFSET+25, graph_value+10))

    if event == 'Beide':
        is_animated = False

        #Zeigen Sie sowohl das Liniendiagramm als auch das Balkendiagramm an
        graph.Erase()
        for i in range(PLOTS_NUMBER):
            graph_value = randint(0, 400)
            graph.DrawRectangle(top_left=(i * BAR_SPACING + EDGE_OFFSET, graph_value),
                                bottom_right=(i * BAR_SPACING + EDGE_OFFSET + BAR_WIDTH, 0), fill_color='blue')
            graph.DrawText(text=graph_value, location=(
                i*BAR_SPACING+EDGE_OFFSET+25, graph_value+10))

            if i > 0:
                graph.DrawLine(((i-1) * LINE_BAR_SPACING + LINE_EDGE_OFFSET + LINE_BAR_WIDTH/2,  before_value),
                               (i * LINE_BAR_SPACING + LINE_EDGE_OFFSET + LINE_BAR_WIDTH/2, graph_value), color='green', width=1)

            graph.DrawText(text=graph_value, location=(
                i * LINE_BAR_SPACING+EDGE_OFFSET+2, graph_value+10))

            graph.DrawPoint((i * LINE_BAR_SPACING + LINE_EDGE_OFFSET +
                             LINE_BAR_WIDTH/2, graph_value), size=3, color='green',)
            before_value = graph_value

    if event == 'Kuchendiagramm':
        is_animated = False
        graph.erase()
        
        # create_arc()Kann nicht gefüllt werden, da keine Füllung vorhanden ist
        graph.DrawArc( (50,50), (DATA_SIZE[0]-50, DATA_SIZE[1]-50), extent=-200, start_angle=90)
        graph.DrawArc( (50,50), (DATA_SIZE[0]-50, DATA_SIZE[1]-50), extent=-400, start_angle=-110 ,arc_color="yellow")
        graph.DrawArc( (50,50), (DATA_SIZE[0]-50, DATA_SIZE[1]-50), extent=-50,  start_angle=-510 , arc_color="blue")
        graph.DrawArc( (50,50), (DATA_SIZE[0]-50, DATA_SIZE[1]-50), extent=-50,  start_angle=-560 , arc_color="red")
        graph.DrawArc( (50,50), (DATA_SIZE[0]-50, DATA_SIZE[1]-50), extent=-20,  start_angle=-610 , arc_color="green")

    if event == 'Sinus':
        is_animated = False
        graph.erase()

        draw_axis()
        prev_x = prev_y = None
        for x in range(0, SIZE_X*2):
            y = math.sin(x/75)*100 + SIZE_Y
            if prev_x is not None:
                graph.draw_line((prev_x, prev_y), (x, y), color='red')
            prev_x, prev_y = x, y

    if event == 'Animation' or is_animated:

        if not is_animated:
            graph.Erase()  #Diagramm einmal löschen

        is_animated = True

        #Zeigen Sie ein Diagramm an, das sich in chronologischer Reihenfolge bewegt
        step_size, delay = GRAPH_STEP_SIZE, DELAY
        y = randint(0, GRAPH_SIZE[1])
        if x < GRAPH_SIZE[0]:  #Erstes Mal
            # window['-GRAPH-'].DrawLine((lastx, lasty), (x, y), width=1)
            graph.DrawLine((lastx, lasty), (x, y), width=1)
        else:
            # window['-GRAPH-'].Move(-step_size, 0)  #Verschieben Sie das gesamte Diagramm nach links
            # window['-GRAPH-'].DrawLine((lastx, lasty), (x, y), width=1)
            graph.Move(-step_size, 0)  #Verschieben Sie das gesamte Diagramm nach links
            graph.DrawLine((lastx, lasty), (x, y), width=1)
            x -= step_size
            lastx, lasty = x, y
        lastx, lasty = x, y
        x += step_size

window.Close()

Der Unterschied zum offiziellen Diagramm besteht darin, dass der Ursprung der Sinuswelle dieses Mal (0,0) von der gesamten Leinwand ausgeht, sodass die Koordinaten von (250.250) zum Ursprung verschoben werden. In der offiziellen Stichprobe ist die Koordinate ganz links (250, -250). Es gibt auch kein offizielles Beispiel für das Kreisdiagramm, und ich habe versucht, es unabhängig mit der "DrawArc" -Methode zu implementieren, aber es gibt keinen "Füll" -Parameter, der das Innere des Kreises ausfüllt, und die Winkelangabe ist eindeutig und zeitaufwändig. Ich denke, es ist besser, keine Kreisdiagramme mehr zu erstellen

Mit dem Diagrammelement von PySimpleGUI können einfache Diagramme wie Balkendiagramme und Liniendiagramme erstellt werden, z. B. solche, die mit der Diagrammfunktion von Excel erstellt wurden.

Über das offizielle grafische Beispiel

PySimpleGUI enthält viele Beispieldateien, und es gibt viele nützliche Beispiele, die als Referenz für die Implementierung verwendet werden können.

Hier sind einige Beispiele, die ich persönlich nützlich und interessant finde.

Kooperation mit matplotlib

Demo_Matplotlib.png

Animation zum Sortieren

visualizing-sorts.png

Echtzeitdiagramm zur CPU-Auslastung

PySimpleGUI_Rainmeter_CPU_Cores.png

Zusammenfassung

Sie haben festgestellt, dass Sie mithilfe der PySimple-Benutzeroberfläche problemlos Diagramme erstellen können. Im offiziellen Beispiel von PySimpleGUI gibt es einige andere Beispiele, die Grafiken verwenden. Schauen Sie also bitte vorbei, wenn Sie interessiert sind.

Recommended Posts

Zeichnen Sie ein Diagramm mit der PySimple-Benutzeroberfläche
Zeichnen Sie mit NetworkX ein Diagramm
Zeichnen Sie mit networkx ein Diagramm
Zeichnen Sie mit matplotlib ein loses Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Zeichnen Sie eine flache Oberfläche mit einem Matplotlib-3D-Diagramm
Zeichnen Sie in Jupyter ein Diagramm mit japanischen Beschriftungen
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Zeichnen Sie ein Diagramm mit den PyQtGraph Part 3-PlotWidget-Einstellungen
Zeichnen Sie ein Diagramm, indem Sie es mit Pandas groupby verarbeiten
[Python] Zeichnen Sie mit Dash Cytoscape ein gerichtetes Diagramm
Zeichnen Sie ein Diagramm mit den Einstellungen von PyQtGraph Part 4-PlotItem
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 6 - Anzeigen einer Legende
Zeichnen Sie mit PyQtGraph Teil 5 ein Diagramm. Erhöhen Sie die Y-Achse
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 2 - Detaillierte Ploteinstellungen
Mathematik mit Python studieren: Zeichnen Sie mit matplotlib ein Sympy-Diagramm (Scipy-Diagramm)
Lassen Sie uns eine GUI mit Python erstellen.
Zeichne einen schönen Kreis mit Numpy
Verarbeitung mehrerer Dateien mit Kivy + Matplotlib + Draw Graph auf der GUI
[Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen
Machen Sie eine schöne Grafik mit Plotly
Zeichnen Sie einfach eine Karte mit matplotlib.basemap
[PyQt] Mehrachsendiagramme mit QtChart anzeigen
So zeichnen Sie ein Diagramm mit Matplotlib
Zeichne mit PyCall ein Herz in Ruby
Erstellen Sie eine GUI-App mit Tkinter of Python
Zeigen Sie das xy-Diagramm von Matplotlib mit PySimpleGUI an.
Zeichnen Sie einfach ein Diagramm, indem Sie eine Datei angeben
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
(Matplotlib) Ich möchte ein Diagramm mit einer in Pixel angegebenen Größe zeichnen
So zeichnen Sie mit matplotlib ein Balkendiagramm, das mehrere Serien zusammenfasst
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Ich habe eine GUI-App mit Python + PyQt5 erstellt
So zeichnen Sie vor der Optimierung ein 3D-Diagramm
Erstellen Sie eine mit tkinter erstellte ausführbare GUI-Datei
Zeichnen Sie eine "Boobs-Kurve" in einem 3D-Diagramm (1).
Memo, mit dem ein Diagramm zum Plotten animiert wurde
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Sie können auch mit Python problemlos eine GUI erstellen
[Python] Zeichne eine Mickey Mouse mit Turtle [Anfänger]
Zeichnen Sie eine "Boobs-Kurve" in einem 3D-Diagramm (2).
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Dateidialog mit Python-GUI öffnen (tkinter.filedialog)
Zeichnen Sie mehrere Fotos in einem Diagramm aus mehreren Ordnern
Zeichne ein Diagramm mit Julia ... Ich habe eine kleine Analyse versucht
[Python] Zeichnen Sie ein Qiita-Tag-Beziehungsdiagramm mit NetworkX
A4 Größe mit Python-Pptx
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Zeichnen Sie gewaltsam so etwas wie ein Flussdiagramm mit Python, matplotlib
Banddiagramm mit Matplotlib
Mit Dekorateur dekorieren
Zeichnen Sie ein Diagramm mit Python
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
Datenvisualisierung mit Python - Die Methode zum gleichzeitigen Zeichnen von Attribut-basierten Diagrammen mit "Facet" ist zu praktisch
Erstellen Sie eine partielle Korrelationsmatrix und zeichnen Sie ein unabhängiges Diagramm