Я пытаюсь построить график (в matplotlib) и динамически изменить значение numpy .linspace, когда значение Y превышает некоторое заданное число. Это происходит гладко до тех пор, пока значение, вычисленное для данного аргумента X, не вызовет OverflowError. Я пытался использовать try и кроме, но, похоже, это не решает мою проблему. Тем не менее, программа просто аварийно завершает работу.
Вот функция для определения начальных и конечных чисел linspace numpy.
def zkDef():
global zk
x = 200
value = 10000
while(value > 1000):
value = eval(funcWzor.get())
x -= 1
zk = x
И в другой функции, часть которой, определяющая аргументы, передана matplotlib fun c:
x = np.linspace(-zk, zk, 1001)
y = np.vectorize(f)
a.plot(x, y(x), '-r')
Чтобы вызвать ошибку OverflowError, я просто набираю функцию 3 ** (x ** 2) на входной поверхности "Wzor funkcji:".
Вот весь код, если необходимо:
from math import *
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import *
from matplotlib.figure import *
import tkinter
import numpy as np
def zkDef():
global zk
x = 200
value = 10000
while(value > 1000):
value = eval(funcWzor.get())
x -= 1
zk = x
def f(x):
return eval(funcWzor.get())
def proceed():
zkDef()
plot2(window)
def plot(window):
global canvas, a, figure
figure = Figure(figsize=(10, 10))
a = figure.add_subplot(111)
a.set_title("Wykres funkcji", fontsize=16)
a.set_ylabel("Y", fontsize=14)
a.set_xlabel("X", fontsize=14)
canvas = FigureCanvasTkAgg(figure, master=window)
canvas.get_tk_widget().pack()
NavigationToolbar2Tk(canvas, plotWindow)
canvas.draw()
a.cla()
def plot2(window):
global canvas, a, figure, x
a.cla()
x = np.linspace(-zk, zk, 1001)
y = np.vectorize(f)
a.plot(x, y(x), '-r')
canvas.draw()
def createRoot(window):
global root, var, plotWindow, zakrA, zakrB, funcWzor
root = tkinter.Frame(window)
root.pack()
plotWindow = tkinter.Frame(root)
plotWindow.grid(row=10, column=0, columnspan=2)
btn = tkinter.Button(root, text="Akceptuj", font=("Arial", 30), bg="green", command=proceed)
btn.grid(column=0, row=1, columnspan=2)
#zakrT = tkinter.Label(root, text="Zakres: ", font=("Arial", 20))
#zakrT.grid(column=0, row=2, columnspan=2)
#zakrAT = tkinter.Label(root, text="a = ", font=("Arial", 20))
#zakrAT.grid(column=0, row=3)
#zakrA = tkinter.Entry(root)
#zakrA.grid(column=1, row=3)
#zakrBT = tkinter.Label(root, text="b = ", font=("Arial", 20))
#zakrBT.grid(column=0, row=4)
#zakrB = tkinter.Entry(root)
#zakrB.grid(column=1, row=4)
funcDefT = tkinter.Label(root, text="Wzor funkcji: ", font=("Arial", 20))
funcDefT.grid(column=0, columnspan=2, row=5)
funcWzor = tkinter.Entry(root)
funcWzor.configure(width = 100)
funcWzor.grid(column=0, columnspan=2, row=6)
window = tkinter.Tk()
window.title("Darboux")
window.resizable(height=None, width=None)
createRoot(window)
plot(window)
window.mainloop()