'animated multi-subplot with matplotlib hist

I try to adapt this code animated plot line to similar situation but using hist in lieu of line plot and expend it to 4 subplot. It seem to be an easy task with this great exemple but I struggle an error on the adaptation.

line1, = ax1.hist([], HIST_BINS1, lw=1, density=True, color='orange', alpha=0.5, 
label='1 an')
ValueError: too many values to unpack (expected 1)

I try to remove the "comma" but don't seem to be the solution, thank to all one who will take time to check my code

import pandas as pd
import numpy as np
from typing import Generator
import matplotlib.pyplot as plt
import matplotlib.animation as animation

path = "E:/data/HQ/meteo_app_moy/"
file = "Rouge (040204)_1062.csv"
data = pd.read_csv(path + file, usecols=[0, 1, 2, 3, 4], sep=";", header=None,         
                  decimal=",", thousands=".")
data['date'] = pd.date_range(start='1/1/1950', end='31/12/2021')
data = data.set_index('date')
yrs = list(data.index.year.unique())
HIST_BINS1 = np.linspace(data[3].min(), data[3].max(), round(data[3].max() / 2))
HIST_BINS2 = np.linspace(data[4].min(), data[4].max(), round(data[4].max() / 2))
HIST_BINS3 = np.linspace(-40, 40, 40)
HIST_BINS4 = np.linspace(0, data[0].max(), 100)


def data_gen():
    cnt = 0
    while cnt <= len(yrs):
        cnt += 1
        y1 = data.iloc[data.index.year.isin([yrs[cnt]]), 3]  # pluie
        y1 = y1[y1 > 0]
        y2 = data.iloc[data.index.year.isin([yrs[cnt]]), 4]  # neige
        y2 = y2[y2 > 1]
        y3 = data[[1, 2]].mean(axis=1)  # Tmoy
        y3 = y3.iloc[y3.index.year.isin([yrs[cnt]])]
        y4 = data.iloc[data.index.year.isin([yrs[cnt]]), 0]  # App
        yield y1, y2, y3, y4


# create a figure with two subplots
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)

# add a fixed hist as ref
ax1.hist(data.loc[data[3]>1,3], HIST_BINS1, lw=1, density=True, color='steelblue',         
           alpha=0.5, label='histo')
# intialize hist objects (one in each axes)
line1, = ax1.hist([], HIST_BINS1, lw=1, density=True, color='orange', alpha=0.5,         
                  label='1 an')
line2, = ax2.hist([], HIST_BINS2, lw=1, density=True)
line3, = ax3.hist([], HIST_BINS3, lw=1, density=True)
line4, = ax4.hist([], HIST_BINS4, lw=1, density=True)
line = [line1, line2, line3, line4]

# initialize the data arrays
y1data, y2data, y3data, y4data = [], [], [], []


def run(data):
    # update the data
    y1, y2, y3, y4 = data
    # xdata.append(t)
    y1data.append(y1)
    y2data.append(y2)
    y3data.append(y3)
    y4data.append(y4)

    # update the data of both line objects
    line[0].set_data(y1data)
    line[1].set_data(y2data)
    line[2].set_data(y3data)
    line[3].set_data(y4data)
    return line


ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=2,
                          repeat=False)
plt.show()

PS: sorry for my english Im working hard on it



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source