Я знаю, что вы можете использовать цикл for для создания нескольких графиков с помощью matplotlib, но вы также можете использовать цикл для встраивания фигур в графический интерфейс?
Мне просто интересно, есть ли способ также создать цикл встроенных сюжетных фигур. Прямо сейчас я использую цикл for для создания нескольких отдельных окон графика. Поэтому я надеялся, что смогу использовать аналогичный цикл for для создания фигур и встраивания их в графический интерфейс, который я делаю. Также, если кто-то знаком с Pyforms, есть ли способ использовать цикл для создания нескольких виджетов управления одного и того же типа?
РЕДАКТИРОВАТЬ:
Сожалею. Позвольте мне уточнить вопрос. Я создал программу, которая получает данные из API EIA, а затем создает графики с этими данными. До сих пор я успешно использовал цикл for, который создает график для каждой интересующей серии. Цикл следующий:
for idx, plot in enumerate(plots):
figs[idx] = plt.figure()
axs[idx] = figs[idx].add_subplot(111)
axs[idx].plot(plot[0], plot[1])
series_xlabel = []
i = 0
while i < series_count:
series_xlabel.append(plot[0][i])
i += round(series_count / 23)
axs[idx].set_xticklabels(reversed(series_xlabel))
axs[idx].locator_params('x', nbins=23)
axs[idx].tick_params('x', rotation=22)
axs[idx].set_xlabel('Dates')
axs[idx].set_ylabel(series_rawdata_yname[idx])
axs[idx].set_title(series_rawdata_sname[idx])
куда plots
является списком, и каждый элемент в нем является необработанными данными каждой серии, извлеченными из API. Цикл также извлекает и называет каждый график с соответствующим заголовком для каждой выбранной серии. Каждый график сделан в отдельном окне с рисунками, что пока хорошо, но я хотел бы встроить каждый из этих рисунков в графический интерфейс, который я делаю, используя библиотеку Pyforms. Теперь Pyforms имеет совместимость с matplotlib и даже имеет собственный виджет для фигур matplotlib, но я не могу понять, как использовать виджет в цикле. Поэтому я думал, что альтернативой будет использование вышеупомянутого цикла для встраивания каждой из фигур в графический интерфейс. Мне было интересно, если это возможно. Что касается Pyforms, я попытался проверить, можете ли вы использовать циклы с виджетами, которые он предоставляет. Кажется, что можно использовать цикл, но он показывает только последнюю итерацию цикла в тестовом графическом интерфейсе. Тестовый код, который я сделал, выглядит следующим образом:
import pyforms
from pyforms import BaseWidget
from pyforms.Controls import ControlDockWidget
from pyforms.Controls import ControlMatplotlib
class test(BaseWidget):
def __init__(self):
super(test, self).__init__('test')
self.itr = [1, 2, 3, 4, 5]
for item in self.itr:
self._graph = ControlMatplotlib(item)
self.formset = [{
'tab%s' %item:['_graph']
}]
if __name__ == "__main__":
pyforms.start_app(test)
Конечным результатом является то, что он показывает только tab5
и соответствующий ему граф в окне. Есть ли способ исправить это, чтобы он отображал каждую вкладку и график, созданный в цикле for?
Обновление: так я разобрался, как сделать цикл для создания нескольких вкладок. Проблема, с которой я столкнулся сейчас, заключается в том, что на последней вкладке отображается только виджет управления Matplotlib. Я предполагаю, что что-то не так с циклом. Вот как выглядит код сейчас:
import pyforms
from pyforms import BaseWidget
from pyforms.Controls import ControlButton
from pyforms.Controls import ControlMatplotlib
class test(BaseWidget):
def __init__(self):
super(test, self).__init__('test')
self.formset = [{}]
for i in range(0, 5):
self._graph = ControlMatplotlib('%s' %i)
self.formset[0]['tab%s' %i] = ['_graph']
if __name__ == "__main__":
pyforms.start_app(test)
Если у вас есть библиотека Pyforms и вы запустите этот код, она выдаст пять вкладок, но только на последней вкладке отобразится виджет Matplotlib. Я хотел бы найти способ исправить цикл, чтобы на всех вкладках отображался виджет Matplotlib.