Создание приложения "Построение графиков" . Автор: Третьяков Максим Яковлевич. Работа №411100
Муниципальное автономное общеобразовательное учреждение
«Средняя общеобразовательная школа № 2 с углублённым изучением
физики, математики, русского языка и литературы»
Проект
Создание приложения
"Построение графиков"
средствами языка программирования Python
Автор: Третьяков Максим Яковлевич,
ученик 11 класса
Руководитель: Бородина Марина Валентиновна,
учитель информатики
г. Верхняя Салда
2023
Введение
В 10 классе на уроках математики я начал изучать новые функции, такие как показательные и логарифмические. В процессе их изучения я решил вспомнить функции, которые известны мне с 7 класса. Я представил, что было бы хорошо иметь такую среду, где всегда можно посмотреть, как выглядят графики различных функций. Свою идею мне захотелось реализовать, и я решил разработать приложение, в котором всегда можно посмотреть графики функций, изучающиеся в школьной программе, а также пронаблюдать закономерности изменения графика функции в зависимости от коэффициентов.
Цель моей работы: создание приложения для демонстрации графиков функций средствами языка программирования Python
Для достижения цели поставил задачи:
и
зучить вспомогательный модуль
Tkinter
для создания приложения
;
и
зучить библиотеки
MatPlotLib
и
Numpy
для визуализации графических данных;
р
азработать
отдельные
программы для построения графиков
каждого вида;
создать
приложение с возможностью построения графиков
.
Я считаю эту тему актуальной потому, что приложение поможет изучить графики различных функций, выполнять самопроверку правильности построения графика той или иной функции. Так же, во время работы над проектом, я улучшу свои навыки программирования в Python.
1.Модули и библиотеки Python
1.1 Matplotlib
Для построения графических изображений в Python возможно подключение модуля graph с набором функций. Но преимущество Python в том, что дается возможность использования разнообразных библиотек для визуализации данных в более презентабельном виде.
Matplotlib — это библиотека языка программирования Python для визуализации данных с помощью двумерной (2D) графики (также поддерживается 3D-графика). Полученные изображения можно использовать в качестве иллюстраций в публикациях.
Matplotlib написан и поддерживается в основном Джоном Хантером и распространяется под лицензией, подобной BSD. Изображения, сгенерированные в различных форматах, можно использовать в интерактивной графике, научных публикациях, графических пользовательских интерфейсах, веб-приложениях, где требуется построение графиков.
1.2 Numpy
NumPy — это библиотекa с открытым исходным кодом для языкa прогрaммирования Python. Ее функция: поддержка многомерных массивов, а также поддержка высокоуровневых математических функций, предназначенных для работы с многомерными массивами. Так же Numpy мне понадобился для построения графиков Логарифмической функции, тригонометрических функций синусоиды, косинусоиды, тангенсоиды и обратных им, при помощи команд np.sin(x) np.arcsin(x) np.cos(x) np.arccos(x) np.tg(x) np.arctg(x),np.log(x).
1.3 Decimal
Мне также понадобился десятичный тип данных переменной. Тип данных Decimal обеспечивает максимальное количество значащих цифр в числе. Он поддерживает до 29 знaчaщих цифр и может представлять значения, превышающие 7,9228 x 1028 . Это особенно подходит для расчетов, например, финансовых, которые требуют большого количества цифр, но не допускают ошибок округления. Decimal не является типом данных с плавающей запятой. Decimal – структура, содержащая двоичное целочисленное значение, а также бит знака и целочисленный коэффициент масштабирования, укaзывающий, кaкaя часть значения является десятичной дробью. Decimal, тип данных, является самым медленным из всех числовых типов.
1.4 Tkinter
Tkinter — графическая библиотека Python, которая предназначена для создания программ с оконным интерфейсом. Она кроссплатформенная, то есть с ее помощью можно писать приложения для Windows, Linux, macOS.
Tkinter — это свободное программное обеспечение, распространяемое под Python-лицензией.
Основные команды Tkinter:
Toplevel
/
Tk
— Окно верхнего уровня (
корневой
виджет
).
Frame
— Рамка. Содержит в себе другие визуальные компоненты, используется для группировки
виджетов
.
Label
— Этикетка. Показывает некоторый текст или графическое изображение.
Entry
— Однострочное поле ввода текста.
Text
— Форматируемое поле ввода текста. Позволяет показывать, редактировать и форматировать текст с использованием различных стилей, а также внедрять в текст рисунки и окна.
Canvas
— Холст. Может использоваться для вывода графических примитивов, таких как прямоугольники, эллипсы, линии, а также текст, изображения и окна.
Button
— Кнопка. Простая кнопка для выполнения команды и других действий.
Radiobutton
— Переключатель. Представляет одно из альтернативных значений некоторой переменной. Обычно действует в группе. Когда пользователь выбирает какую-либо опцию, с ранее выбранного в этой же группе элемента выбор снимается.
Checkbutton
— Флажок. Похож на
Radiobutton
, но имеет возможность множественного выбора, предоставляя отдельную переменную на каждый экземпляр
виджета
.
Scale
— Шкала с ползунком. Позволяет задать числовое значение путём перемещения движка.
Listbox
— Список. Показывает список, из которого пользователь может выделить один или несколько элементов.
Scrollbar
— Полоса прокрутки. Может использоваться вместе с некоторыми другими компонентами для их прокрутки.
Menu
— Меню. Служит для организации всплывающих (
popup
) и ниспадающих (
pulldown
) меню.
Menubutton
— Кнопка-меню. Используется для организации pulldown-меню.
Message
— Сообщение. Аналогично
Label
, но позволяет заворачивать длинные строки и легко меняет свой размер.
OptionMenu
Spinbox
LabelFrame
PanedWindow
2.Создание приложения
В самом начале для работы модулей их необходимо было установить, прописав в командную строку такую команду pip install matplotlib, автоматически с этим модулем скачается и библиотека Numpy. Аналогично при помощи команды pip install tk скачаем Tkinter.
Графики школьной программы я решил объединить в приложение «Построение графиков». Для создания приложения остановил свой выбор на библиотеке Tkinter, которая тоже находится в Python. Сначала я изучил команды, имеющиеся в этой библиотеке, а потом приступил к написанию приложения. Приложение имеет простую структуру: состоит из кнопок, каждая из которых строит график.
В начале программы я должен получить все возможности библиотеки Tkinter при помощи команды from tkinter import *. Дальше я создаю окно приложения при помощи команды root = Tk() и называю его root.title(), также надо указать размеры окна (root.geometry('800x400')) и возможность менять их (root.resizable(width=True, height=True)). На данном этапе у меня получается пустое окно с названием, размером 800x400.
Затем я создал фрейм (область для размещения объектов ), команда его создания выглядит так (frame_top = Frame(root, bg='#008000', bd=5)). На фрейме я разместил кнопки для запуска программ построения графика.
Кнопка создается командой:
btn=Button(frame_top,width=25,height=1,text=,command=).place(),
где frame_top - это фрейм, к которому будет принадлежать кнопка, width и height - это ширина и высота кнопки, text - создает на кнопке надпись, а command= функцию.
Дальше я создаю функцию, которая строит график. У нас получается вот такой код программы для построения функции (Линейная):
def lineynaya():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b(y=kx+b):"
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод отрезка для построения графика
function_entry =Entry(new_window)#ввод коэффициентов
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))
#линейная функция
y =float(s1[0])*x+float(s1[1])
# Построение графика
plt.title('y =kx+b') # заголовок
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
Данный фрагмент кода создает окно для ввода необходимых значений для построения графика.
После ввода числовых значений и нажатии на кнопку «Построить» можно получить вот такой график
Аналогично написал код для других категорий функций.
Главное окно приложения выглядит так:
В ходе работы над проектом мне пришла идея решать системы уравнений при помощи данного приложения, и я задумал это реализовать. Сначала я подумал, как было бы удобно сделать это, и решил остановиться на том, чтобы строить два и более графиков в одной системе координат. На графике при наведении на точку пересечения, можно увидеть приближенное значение решения системы.
Для компиляции файла приложения в exe-файл, мне понадобился pyinstaller. Это утилита для запуска кода программы без скачивания среды разработки python, модулей и библиотек для python. Для ее установки я в командную строку Windows вписал команду pip installer pyinstaller. Когда эта утилита скачалась, при помощи команды pyinstaller –F –w –i<Путь к папке с иконкой> «Название приложения» конвертировал его в exe файл. Подкоманда –F объединяет все в один файл, -w заглушает консоль, чтобы она не открывалась при запуске exe файла и –i добавляет иконку приложению.
Заключение
В ходе работы над проектом я изучил модуль Tkinter для создания приложения, возможности библиотек Matplotlib и Numpy, разработал программы для построения графиков и объединил их в одно приложение. Также теперь у меня есть приложение, в котором я всегда могу посмотреть функции, которые я проходил в школе, их закономерности и свойства.
Список источников
https://ru.wikipedia.org/wiki/Tkinter
https://ru.wikipedia.org/wiki/Matplotlib
https://ru.wikipedia.org/wiki/NumPy
Приложение 1
Код приложения
from tkinter import * # Импорт библиотек и модулей
from tkinter import messagebox
import matplotlib.pyplot as plt
import numpy as np
import webbrowser
import decimal
from math import *
root = Tk() # Создаем окно приложения
root['bg'] = '#30d5c8'# Указываем цвет
root.title('Построение графиков')# Указываем название приложения
root.geometry('800x400')# Указываем размеры окна
root.resizable(width=True, height=True)# Делаем возможным менять размеры окна
frame_top = Frame(root, bg='#30d5c8')# Создаем фрейм (область для размещения других объектов)
frame_top.place (relx=0.05, rely=0.1, relwidth=0.80, relheight=0.8)# Указываем к какому окну он принадлежит, какой у него фон и какая обводка
def lineynaya():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b(y=kx+b):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))
#линейная функция
y =float(s1[0])*x+float(s1[1])
# Построение графика
plt.title('y =kx+b') # заголовок
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
def kvadratnaya():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты a,b,c(y=ax^2+bx+c):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))
#линейная функция
y =float(s1[0])*x**2+float(s1[1])*x+float(s1[2])
# Построение графика
plt.title('y =ax^2+bx+c') # заголовок
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
#############################
def koren():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
x_label.grid(row=0, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))
#линейная функция
y=np.sqrt(x)
# Построение графика
plt.title('y =ax^2+bx+c') # заголовок
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
############################
def giperbola():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k a(y= k/ax):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.around(np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2])),decimals=4)
#линейная функция
y = (float(s1[0]))/((float(s1[1]))*x)
# Построение графика
plt.title('y =ax^2+bx+c') # заголовок
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
################################
def pokazatel():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=(kx+b)^c):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))
#линейная функция
y =(float(s1[0])*x+float(s1[1]))**float(s1[2])
# Построение графика
plt.title('y =(kx+b)^c') # заголовок
plt.grid() # включение отображение сетки
plt.plot(x, y) # построение графика
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
#######################
def logarifm():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c,d(y=k*log(bx+c) по основанию d):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))#линейная функция
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
d=float(s1[3])
y=k*np.log2(b*x+c)
plt.title('y=k*log(bx+c) по основанию d') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
def sin():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=k*sin(bx+c) ):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))#линейная функция
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
y=k*np.sin(b*x+c)
plt.title('y=k*sin(bx+c)') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
def arcsin():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=k*arcsin(bx+c) ):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.around(np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2])),decimals=4)
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
y=k*np.arcsin(b*x+c)
plt.title('y=k*arcsin(b*x+c)') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
def cos():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=k*cos(bx+c) ):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))#линейная функция
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
y=k*np.cos(b*x+c)
plt.title('y=k*cos(b*x+c)') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
def arccos():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=k*arccos(bx+c) ):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))#линейная функция
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
y=k*np.arccos(b*x+c)
plt.title('y=k*arccos(b*x+c)') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
def tg():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=k*tg(bx+c) ):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))#линейная функция
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
y=k*np.sin(b*x+c)
plt.title('y=k*tg(b*x+c)') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
def arctg():
new_window = Toplevel()
new_window.title("Ввод данных")
x_label = Label(new_window,text="Введите отрезок и шаг через пробел:")
function_label = Label(new_window,text="Введите коэффициенты k,b,c(y=k*arctg(bx+c) ):")
x_label.grid(row=0, column=0, sticky="w")
function_label.grid(row=1, column=0, sticky="w")
x_entry = Entry(new_window)#ввод
function_entry =Entry(new_window)#ввод
x_entry.grid(row=0,column=1, padx=5, pady=5)
function_entry.grid(row=1,column=1, padx=5, pady=5)
def function_build():
s=x_entry.get().split()
s1=function_entry.get().split()
x = np.arange(float(s[0]),float(s[1])+float(s[2]),float(s[2]))#линейная функция
k=float(s1[0])
b=float(s1[1])
c=float(s1[2])
y=k*np.arctg(b*x+c)
plt.title('y=k*arctg(b*x+c)') # заголовок
plt.grid()# включение отображение сетки
plt.plot(x, y) # построение графика
ax =plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()
display_button = Button(new_window,text="Построить", command=function_build) #кнопка запуска
display_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
####################
btn = Button(frame_top,width=25,height=1,text='Линейная функция', command=lineynaya).place(x=0,y=0)#создание кнопки
btn = Button(frame_top,width=25,height=1,text='Квадратичная функция', command=kvadratnaya).place(x=0,y=75)
btn = Button(frame_top,width=25,height=1,text='Функция квадратного корня', command=koren).place(x=0,y=150)
btn = Button(frame_top,width=25,height=1,text='Дробно-линейная функция', command=giperbola).place(x=200,y=0)
btn = Button(frame_top,width=25,height=1,text='Показательная функция', command=pokazatel).place(x=200,y=150)
btn = Button(frame_top,width=25,height=1,text='Логарифмическая функция', command=logarifm).place(x=200,y=75)
btn = Button(frame_top,width=25,height=1,text='Синусоида', command=sin).place(x=400,y=0)
btn = Button(frame_top,width=25,height=1,text='График арксинуса', command=arcsin).place(x=600,y=0)
btn = Button(frame_top,width=25,height=1,text='Косинусоида', command=cos).place(x=400,y=75)
btn = Button(frame_top,width=25,height=1,text='График арккосинуса', command=arccos).place(x=600,y=75)
btn = Button(frame_top,width=25,height=1,text='Тангенсоида', command=tg).place(x=400,y=150)
btn = Button(frame_top,width=25,height=1,text='График арктангенса', command=arctg).place(x=600,y=150)
root.mainloop()