#python #generator #subplot
#питон #генератор #подзаголовок
Вопрос:
Я хочу создать два или более подзаголовков из двух или более функций генератора, используя FuncAnimation. Мой код для создания графика из одной функции генератора выглядит следующим образом:
from data import Data
gen = someGeneratorFunction(dataIn)
def animate(frame):
axs.cla()
axs.set_xticks([])
axs.set_yticks([])
axs.bar(list(range(Data.data_count)), # X
[d.value for d in frame], # data
1, # width,
color=[d.colour for d in frame], # colour
).get_children()
anim = FuncAnimation(fig, animate, frames=gen, interval=1 ,repeat=False)
plt.show()
И то, что я пытаюсь сделать, будет выглядеть примерно так:
gen1 = someGeneratorFunction1(dataIn)
gen2 = someGeneratorFunction2(dataIn)
Затем мне каким-то образом нужно было бы объединить генераторы gen1 и gen2 (которые могут иметь разную длину), прежде чем передавать их в FuncAnimation. Я пробовал использовать
gen = zip(gen1, gen2)
но тогда я фактически передаю zip-объект, а не объект генератора в FuncAnimation.
Есть ли какой-нибудь способ объединить генераторы? Спасибо за любую помощь.
Комментарии:
1. Разве
zip
объект не является генератором? можете ли вы объяснить, почему вы не можете передать его?2. Я не знаю, является ли
zip
объект генератором. На самом деле я могу передать его в FuncAnimation. Я подумал, что затем все генераторы сразу передавались в мою функцию animate, а не передавались кадр за кадром, как это обычно бывает (и, безусловно, имеет место в моем рабочем коде, где я успешно передаю только один генератор). Но я только что понял, что, возможно, ошибся. Теперь у меня есть объединенные генераторы (переменнаяgen
), переданные функции animate, и когда я устанавливаю точку останова, кажется, что это всего лишь один кадр на генератор.3. Но когда я пытаюсь распаковать архив с помощью
gen1, gen2= zip(*gen)
, я получаю сообщение об ошибке «Ошибка значения: слишком много значений для распаковки (ожидается 2)». Я продолжу работать над этим и опубликую любой прогресс…4. Извините, это был не вопрос (или, скорее, он был риторическим):
zip
является генератором и может объединять несколько генераторов в один. Кроме того, вы не можете сделатьa, b = zip(*gen)
(или любой генератор, если на то пошло). Генераторы не возвращают ничего вне контекста итерации.