Я хочу создать класс, который будет создавать обновляемые графики. Я планирую разместить от 8 до 16 фигурок в одном окне, поэтому было бы неплохо иметь класс, который инициировал бы их для меня. Эти графики будут автоматически обновляться каждую секунду данными, полученными от датчиков, поэтому графики не будут статичными. Я могу инициировать графики, но не могу автоматически обновлять их после инициализации. Ошибка
AttributeError: объект 'channel' не имеет атрибута 'plot'
После этого появляется.
При использовании класса, а не закомментированного раздела, переменные меняют свой тип с matplotlib.axes._axes.Axes на __main__.channel, что я думаю что нарушает код. Программа работает так, как задумано, когда я использую закомментированные строки кода, но я думаю, что лучший способ сделать что-то подобное - это не закомментированный раздел.
import tkinter as tk
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class channel():
def __init__(self, parentFigure, subplotPosition, x, y, channelNumber, clr):
self = parentFigure.add_subplot(subplotPosition)
self.plot(x, y, color=clr)
self.set_title (channelNumber, fontsize=16)
self.set_ylabel("Temperature (°C)", fontsize=14)
self.set_xlabel("Time (seconds)", fontsize=14)
def autoUpdate():
global x, y
x = np.append(x, x[-1]+1)
y = np.append(y, y[-1]*-1)
a.plot(x, y, color='blue')
b.plot(x, y, color='red')
canvas.draw()
window.after(1000, autoUpdate)
window = tk.Tk()
window.title("My First GUI")
window.geometry("1000x750")
#Datetime Label
x = np.array([1])
y = np.array([2])
#Create a frame
myPlotFrame = tk.Frame(master = window)
myPlotFrame.pack(pady=20)
#Figure stuff
fig = Figure()#(figsize=(6,6))
'''
# This stuff that's commented out works as intended!
a = fig.add_subplot(121)
a.plot(x, y, color='blue')
a.set_title ("Channel 1", fontsize=16)
a.set_ylabel("Temperature (°C)", fontsize=14)
a.set_xlabel("Time (seconds)", fontsize=14)
b = fig.add_subplot(122)
b.plot(x, y, color='red')
b.set_title ("Channel 2", fontsize=16)
b.set_ylabel("Temperature (°C)", fontsize=14)
b.set_xlabel("Time (seconds)", fontsize=14)
'''
# This does not work
a = channel(fig, 121, x, y, "Channel 1", "blue")
b = channel(fig, 122, x, y, "Channel 2", "red")
canvas = FigureCanvasTkAgg(fig, master=window)
canvas.get_tk_widget().pack()
canvas.draw()
window.after(1000, autoUpdate)
window.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/798 ... able-plots
Как создать класс, который генерирует автоматически обновляемые графики ⇐ Python
Программы на Python
1769489745
Anonymous
Я хочу создать класс, который будет создавать обновляемые графики. Я планирую разместить от 8 до 16 фигурок в одном окне, поэтому было бы неплохо иметь класс, который инициировал бы их для меня. Эти графики будут автоматически обновляться каждую секунду данными, полученными от датчиков, поэтому графики не будут статичными. Я могу инициировать графики, но не могу автоматически обновлять их после инициализации. Ошибка
AttributeError: объект 'channel' не имеет атрибута 'plot'
После этого появляется.
При использовании класса, а не закомментированного раздела, переменные меняют свой тип с matplotlib.axes._axes.Axes на __main__.channel, что я думаю что нарушает код. Программа работает так, как задумано, когда я использую закомментированные строки кода, но я думаю, что лучший способ сделать что-то подобное - это не закомментированный раздел.
import tkinter as tk
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class channel():
def __init__(self, parentFigure, subplotPosition, x, y, channelNumber, clr):
self = parentFigure.add_subplot(subplotPosition)
self.plot(x, y, color=clr)
self.set_title (channelNumber, fontsize=16)
self.set_ylabel("Temperature (°C)", fontsize=14)
self.set_xlabel("Time (seconds)", fontsize=14)
def autoUpdate():
global x, y
x = np.append(x, x[-1]+1)
y = np.append(y, y[-1]*-1)
a.plot(x, y, color='blue')
b.plot(x, y, color='red')
canvas.draw()
window.after(1000, autoUpdate)
window = tk.Tk()
window.title("My First GUI")
window.geometry("1000x750")
#Datetime Label
x = np.array([1])
y = np.array([2])
#Create a frame
myPlotFrame = tk.Frame(master = window)
myPlotFrame.pack(pady=20)
#Figure stuff
fig = Figure()#(figsize=(6,6))
'''
# This stuff that's commented out works as intended!
a = fig.add_subplot(121)
a.plot(x, y, color='blue')
a.set_title ("Channel 1", fontsize=16)
a.set_ylabel("Temperature (°C)", fontsize=14)
a.set_xlabel("Time (seconds)", fontsize=14)
b = fig.add_subplot(122)
b.plot(x, y, color='red')
b.set_title ("Channel 2", fontsize=16)
b.set_ylabel("Temperature (°C)", fontsize=14)
b.set_xlabel("Time (seconds)", fontsize=14)
'''
# This does not work
a = channel(fig, 121, x, y, "Channel 1", "blue")
b = channel(fig, 122, x, y, "Channel 2", "red")
canvas = FigureCanvasTkAgg(fig, master=window)
canvas.get_tk_widget().pack()
canvas.draw()
window.after(1000, autoUpdate)
window.mainloop()
Подробнее здесь: [url]https://stackoverflow.com/questions/79876706/how-to-create-a-class-that-generates-auto-updateable-plots[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия