Как построить график шага с помощью цикла for в python - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь построить график шагов внутри цикла на основе ввода. Интерфейс ввода выглядит следующим образом:

если я введу service life = 60, discount rate =2, maintenance cost=1, maintenance routine = 9, quality = "high", общая сумма будет 3.94 после нажатия кнопки вычисленияэто нормально для меня.

enter image description here

Мой код выглядит следующим образом:

from tkinter import *
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure

root = Tk()

root.title("LCAT")

var1 = StringVar()
var2 = StringVar()
var3 = StringVar()
var4 = StringVar()
var5 = StringVar()
Total = StringVar()

center_figure = Frame(root, width=500, height=500, relief=SUNKEN, bd=3)
center_figure.grid(row=7, column =1)

lblservice = Label(root, text="Service Life", bd=5).grid(row=0, column=0)
service_life = Entry(root, bd=5, textvariable=var1).grid(row=0, column=1)

lblrate = Label(root, text="Discount Rate", bd=5).grid(row=1, column=0)
discount_rate = Entry(root, bd=5, textvariable=var2).grid(row=1, column=1)

lblmaintenance = Label(root, text="Maintenance Cost", bd=5).grid(row=2, column=0)
maintenance_cost = Entry(root, bd=5, textvariable=var3).grid(row=2, column=1)

lblmaintenance_routine = Label(root, text="Maintenance Routine", bd=5).grid(row=3, column=0)
maintenance_time = Entry(root, bd=5, textvariable=var4).grid(row=3, column=1)

lblquality = Label(root, text="Quality", bd=5).grid(row=4, column=0)
cob_quality_main = ttk.Combobox(root, state='readonly', textvariable=var5)
cob_quality_main['value']=('','High','Normal','Low')
cob_quality_main.current(0)
cob_quality_main.grid(row=4, column=1)

lbltotal= Label(root, text="Total", bd=5).grid(row=5, column=0)
total_cost = Entry(root, bd=5, textvariable=Total).grid(row=5, column=1)
#------------------------------ Functions ---------------------------
def Exit():
    root.destroy()

def Maintenance():
    if (var5.get() == "High"):
        x = float(1.34)
        y = var4.get()
        z = var1.get()
        a = (float(var2.get())) / 100
        b = float(var3.get())
        ax = range(int(y), int(z), int(y))
        total = 0
        for t in ax:
            total += (0.5 + 0.5 * x * b) / (1 + a) ** t
            print(t)
            print('%0.2f' % (total))
            Total.set(str('%0.2f' % (total)))
            fig = Figure(figsize=(5, 4), dpi=100)
            fig.add_subplot(111).plot([t], [total])
            canvas = FigureCanvasTkAgg(fig, center_figure)
            canvas.draw()
            canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1, ipadx=45, ipady=30)

    elif var5.get() == "Normal":
        x = float(1.00)
        y = var4.get()
        z = var1.get()
        a = (float(var2.get())) / 100
        b = float(var3.get())
        ax = range(int(y), int(z), int(y))
        total = 0
        for t in ax:
            total += (0.5 + (0.5 * x * b)) / ((1 + a) ** t)
            print(t)
            print('%0.2f' % (t, total))
            Total.set(str('%0.2f' % (total)))
            fig = Figure(figsize=(5, 4), dpi=100)
            fig.add_subplot(111).plot([t], [total])
            canvas = FigureCanvasTkAgg(fig, center_figure)
            canvas.draw()
            canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1, ipadx=45, ipady=30)

    elif var5.get() == "Low":
        x = float(0.75)
        y = var4.get()
        z = var1.get()
        a = (float(var2.get())) / 100
        b = float(var3.get())
        ax = range(int(y), int(z), int(y))
        total = 0
        for t in ax:
            total += (0.5 + (0.5 * x * b)) / ((1 + a) ** t)
            print(t)
            print('%0.2f' % (t, total))
            Total.set(str('%0.2f' % (total)))
            fig = Figure(figsize=(5, 4), dpi=100)
            fig.add_subplot(111).plot([t], [total])
            canvas = FigureCanvasTkAgg(fig, center_figure)
            canvas.draw()
            canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1, ipadx=45, ipady=30)

btn1 = Button(root, text="Exit", bd=5, command=Exit).grid(row=6, column=0)
btn2 = Button(root, text="Calculate", bd=5, command=Maintenance).grid(row=6, column=1)

root.mainloop()

Ось x графика должна быть t, а ось y -итого

, когда я печатаю t и total, списки тоже правильные. Однако график не отображается на холсте, и мне нужна ваша помощь.

График должен быть таким: enter image description here

1 Ответ

1 голос
/ 22 октября 2019

это небольшой пример, который ограничивает точку

import matplotlib.pyplot as plt

def myPlt(x):
    plt.figure()
    plt.plot(x)
    plt.show()

for i in range(1,3):
    rnj= range(i*10)
    myPlt(rnj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...