0

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

2

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.