Inhalt eines Pandas DataFrame in einer tkinter GUI plotten mit Sekundärachse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo,

ich habe habe sehr viele Prozessdaten, welche ich verarbeitet und in ein DataFrame gepackt habe. Jetzt möchte ich diverse Spalten daraus in einer GUI plotten. Bisher habe ich folgenden Code geschrieben:

Code: Alles auswählen

fig = Figure(figsize = (4, 4), dpi = 100)

plot1 = fig.add_subplot(111)

x.plot(x="Diff_Rollkreis", y="Beugemoment", style='o', xlabel='Diff. Rollkreis-Ø [mm]', ylabel='Beugemoment [Nm]', color='red', markersize=2, ax=plot1)
x.plot(x="Diff_Rollkreis", y="Axialspiel", style='o', xlabel='Diff. Rollkreis-Ø [mm]', ylabel='Axialspiel [mm]', color='blue', markersize=2, ax=plot1)

canvas = FigureCanvasTkAgg(fig, master = master)
canvas.get_tk_widget().place(x=235,y=0)
canvas.draw()
Damit bekomme ich beide Punktewolken in einen Plot. Jetzt möchte ich aber, dass das Beugemoment auf der Primärachse (Y-Achse links) und das Axialspiel auf der Sekundärachse (Y-Achse rechts) aufgetragen wird. Wie löse ich das am geschicktesten?
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo Leute,

war doch recht einfach. Bin gestern einfach auf dem Schlauch gestanden. Hier die Lösung:

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
from Function_df_Data_7370 import df_Data_7370

master = tk.Tk()
master.geometry("1200x1100")

x = df_Data_7370(Startdatum, Enddatum) 

fig, ax = plt.subplots(figsize=(10, 5))
ax.scatter(x['Diff_Rollkreis'], x['Beugemoment'], color="red", marker="o", s=1)
ax.set_xlabel('Diff. Rollkreis-Ø [mm]', fontsize=12)
ax.set_ylabel('Beugemoment [Nm]', fontsize=12, color="red")
ax.set_ylim(0,10)

ax2 = ax.twinx()
ax2.scatter(x['Diff_Rollkreis'], x['Axialspiel'], color="blue", marker="o", s=1)
ax2.set_ylabel("Axialspiel [mm]", fontsize=12, color="blue")
ax2.set_ylim(0,1)

canvas = FigureCanvasTkAgg(fig, master = master)
canvas.get_tk_widget().place(x=235,y=0)

master.mainloop()
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das mit der Pixel-`geometry()` und dem `place()` funktioniert aber nur wenn das zufällig halbwegs zu der Plotgrösse in Inches passt. Den `geometry()`-Aufruf sollte man weg lassen und `grid()` oder `pack()` statt `place()` verwenden.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten