Seite 1 von 1

Arrays plotten

Verfasst: Montag 9. Oktober 2017, 15:28
von mf90
Hallo zusammen!

Ich heiße Markus und schreibe im Moment meine Bachelorarbeit. Hierfür benötige ich ein Python-Skript, das eine Datei ausließt und gewisse Werte speichert. Diese Werte möchte ich anschließend in einem Liniendiagramm plotten und als Bild abspeichern.
Meine beiden Programmteile, also das Auslesen der Datei und Abspeichern der Werte, sowie das Plotten eines Diagramms funktionieren bisher unabhängig voneinander.
Nun habe ich das Problem, dass ich beim Zusammenfügen der beiden Programmteile keinen Plot erhalte.
Klingt vllt etwas verwirrend aber hier ist ein Minimalbeispiel dazu:

Dazu möchte ich noch erwähnen, dass ich den ersten Teil, also das Auslesen der Datei mittels PyCharm kontrolliert habe.
Die Ausgabe von PyCharm werde ich einfach im Programmbeispiel einfügen und kennzeichnen.
Das Plotten hat in PyCharm nicht funktioniert da ich keine Möglichkeit habe die Packages zu integrieren.
Es hat aber in einem anderen Programm, in welchem das Skript letztendlich auch laufen soll, funktioniert. Dort habe ich separate
Variablen übergeben.

--------------------------------------------------------------------------------------

Code: Alles auswählen


import matplotlib as mlp
import matplotlib.pyplot as plt
import numpy as np
from math import *
import csv
import pprint



# function must be named 'func'

def func():                 # Das Skript wird später von einem anderen Programm verwendet, dazu gehört  das "def func():"
 
                .
                .
                .
                .
                . # hier wird die Datei ausgelesen und die Werte in die untenstehenden Variablen geschrieben
                .
                .
                .
                .  
 
 #ruhestrom = []             # Array mit den Ruhestromwerten
 #zeit = []                      # Array mit den Ruhestromzeiten
 #max_t = max(zeit)             # Gesamtmessdauer
 #max_I = max(ruhestrom)    # maximaler Ruhestrom
 #t_maxI = zeit[index]          # Zeitpunkt des maximalen Ruhestroms


# PyCharm gibt mir nach einem Print der Variablen, die Werte folgendermaßen aus (in Reihenfolge der oberen Variablennamen):
#       [72.601, 72.493, ...] # hier stehen noch mehrere Werte drin
#       [0.075613215591812, 0.2689515619894, ...]
#       350.970061064
#       75.155
#       122.464918764


# ---------------------------------------------------------------------------------------------------------
# ############ Diagramm erstellen ####################
# ----------------------------------------------------------------------------------------------------------

# Achsengroesse des Diagramms angeben
    plt.axis([0, max_t*1.3, 0, max_I*1.3])  # x_min, x_max, y_min, y_max
    plt.grid(True)  # Raster im Diagramm hinterlegen



# Label fuer die x-,y-Achse vergeben:
    plt.title('Ruhestrommessung', fontsize=25, color='gray')
    plt.xlabel('Messdauer [t/s]')
    plt.ylabel('Ruhestrom [I/mA]')
    
# x-y-Plot erstellen:   
    plt.plot(zeit, ruhestrom, color='red', linewidth=1, linestyle='-')
    
# Vertikale gestrichelte Linie an der Stelle 'MaxRuhestrom' einzeichnen
# (von der x-Achse bis zum maximalen Ruhestrom):
    plt.plot([t_maxI, t_maxI], [0, max_I], color='red', linewidth=0.5, linestyle="--")
    
# Horizontal gestrichelte Linie an der Stelle 'MaxRuhestrom' einzeichnen
# (von der y-Achse bis zum maximalen Ruhestrom):
    plt.plot([0, t_maxI], [max_I, max_I], color='red', linewidth=0.5, linestyle="--")
    
# Maximalen Wert des Ruhestroms mit Marker versehen:
# (Die x- und y-Werte muessen -- wie bei plot() -- als Liste angegeben werden)
# (Mit s=50 wird die Groesse ('size') auf 50 Pixel festgelegt)
    plt.scatter([t_maxI], [max_I], s=50, marker='o', color='red')
    

    
#Das Achsen-Objekt des Diagramms in einer Variablen ablegen:
    ax = plt.gca()
      
    
# Die obere und rechte Achse unsichtbar machen:
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')

    
# Speichern als PNG-Datei: 
    plt.savefig('P:/.../Ruhestrommessung.png')
   
    


    pass

---------------------------------------------------------------------------------


Führe ich das Skript in meinem Programm aus, erhalte ich keine PNG-Datei im genannten Pfad.
Das Programm verfügt über keinen debugger, somit kann ich den Fehler auch kaum lokalisieren.
Vllt sieht der ein oder andere den Fehler bzw. das Problem und kann mir helfen?


Schöne Grüße

Markus

Re: Arrays plotten

Verfasst: Montag 9. Oktober 2017, 15:46
von __deets__
Bitte benutz die Code-tags hier im Forum um deinen Quelltext so zu formatieren das man den auch entziffern kann.

Re: Arrays plotten

Verfasst: Montag 9. Oktober 2017, 16:31
von __deets__
Ich find das sehr verwirrend, und wirklich ein Minimalbeispiel ist es nicht - das impliziert ausfuehrbarkeit.

Und genau da wuerde ich auch ansetzen. Bau dein Skript so auf, dass es *wirklich* minimal ist, und nur einen Testplot erzeugt & speicher.

Erweitere das dann sukzessive aus deinen existierenden Codeschnipseln bis es geht.

Wenn pycharm dir in die Quere kommt, benutz einfach eine Shell und starte das Programm von da.

Re: Arrays plotten

Verfasst: Montag 9. Oktober 2017, 19:38
von Sirius3
@mf90: was heißt "Führe ich das Skript in meinem Programm aus"? Wie führst Du das aus? Das was Du zeigst ist kein Skript, sondern nur eine Funktionsdefinition.

Re: Arrays plotten

Verfasst: Montag 9. Oktober 2017, 21:36
von mf90
Das Programm ist ein firmeninternes Tool zur Testautomatisierung, welches hauptsächlich symbolbasierend arbeitet. Für spezielle "Spielereien" wie Auslesen einer Datei können in diesem Programm Variablen erstelllt werden, die als python function agieren. Sprich ich kopiere mein Skript in diese variable als "def func ():" und
beim Ausführen der Automatisierung wird es dementsprechend interpretiert. Die Funktion wird durch den Aufruf der Variable also ausgeführt. Etwas strange aber so funktioniert das Tool.

Danke schonmal für die Rückmeldung __deets__ !
Werde es morgen noch einmal probieren

Re: Arrays plotten

Verfasst: Dienstag 10. Oktober 2017, 07:04
von Sirius3
@mf90: es hört sich seltsam an, dass diese Testumgebung nirgends Exceptions logged. Das ist ja das mindeste, um überhaupt Fehler zu finden. Notfalls kann man das aber selbst in die Funktion schreiben und Exceptions in eine Datei ausgeben lassen.

Re: Arrays plotten

Verfasst: Dienstag 10. Oktober 2017, 09:14
von mf90
Servus Zusammen!

Habe den/die Fehler endlich gefunden! :D

1.

Code: Alles auswählen

plt.axis([0, max_t*1.3, 0, max_I*1.3])  # x_min, x_max, y_min, y_max
habe die Grenzen max_t*1.3 und max_I*1.3 in neue Variablen geschrieben und diese dem Plot-Befehl übergeben.

2. Ich hatte einen Syntaxfehler in dem Automatisierungstool. Dabei habe ich einfach nur zwei Klammern vergessen. :roll:

Wie ich schon beschrieben habe liegt in meiner Variablen (Nennen wir sie mal "Messung") mein Quellcode in einer def func():.
Nun muss ich die Variable natürlich mit "Messung()" aufrufen um die Funktion auch auszuführen. Hier habe ich die Klammern vergessen.


Danke für eure Hilfe!!! :)