Bjr à tous, toutes, je cherche à créer un graphique avec 4 séries historiques qui se dessinent point par point tous les 300ms. J'aimerais que ces séries avancent avec leur label (cela fonctionne) mais aussi avec la valeur de leurs coordonnées à chaque point. Au bout de ce projet j'aimerais remplacer les label par des images par exemple le drapeau chinois pour la Chine.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation,FFMpegFileWriter
import numpy as np
from matplotlib.dates import DateFormatter
from IPython import display 
import ffmpeg
 
# donnees sur les populations en Chine, Inde, Afrique, Amérique Latine
china = pd.read_csv('C:\\Users\\laure\\python\\data\\china.csv')
india = pd.read_csv('C:\\Users\\laure\\python\\data\\india.csv')
latin_america = pd.read_csv('C:\\Users\\laure\\python\\data\\latin_america.csv')
africa = pd.read_csv('C:\\Users\\laure\\python\\data\\africa.csv')
 
# Utilisez la colonne 'date' comme index pour votre DataFrame
china['date'] = pd.to_datetime(china['date'])
africa['date'] = pd.to_datetime(africa['date'])
latin_america['date'] = pd.to_datetime(latin_america['date'])
india['date'] = pd.to_datetime(india['date'])
 
china.set_index('date', inplace=True)
africa.set_index('date', inplace=True)
latin_america.set_index('date', inplace=True)
india.set_index('date', inplace=True)
 
 
 
 
 
# Créez une figure et un objet axes
fig, ax = plt.subplots(figsize=(10, 6))
ax.set_title('Population in Africa, China, Latin America, and India by 2100', pad=20, fontsize=20, weight='bold')
ax.annotate('Population in million', xy=(0.5, 1.02), xytext=(0, 0), xycoords='axes fraction',
            textcoords='offset points', ha='center', fontsize=8, color='grey')
ax.set_facecolor("black")
 
# Plot des lignes (initialement vides)
line_china, = ax.plot(china.index, china[" Population"], label='China', color='red')
text_china = ax.text(1, 1, "abc", color="red")
annotation_china = ax.annotate("", xy=(china.index[0], china[" Population"].iloc[0]), xytext=(10, 10),
                                textcoords="offset points", ha='right', fontsize=10, color='red')
 
line_india, = ax.plot(india.index, india[" Population"], label='India', color='blue')
text_india = ax.text(1, 1, "abc", color="blue")
annotation_india = ax.annotate("", xy=(india.index[0], india[" Population"].iloc[0]), xytext=(10, 10),
                                textcoords="offset points", ha='right', fontsize=10, color='blue')
 
line_africa, = ax.plot(africa.index, africa[" Population"], label='Africa', color='green')
text_africa = ax.text(1, 1, "abc", color="green")
annotation_africa = ax.annotate("", xy=(africa.index[0], africa[" Population"].iloc[0]), xytext=(10, 10),
                                 textcoords="offset points", ha='right', fontsize=10, color='green')
 
line_latin_america, = ax.plot(latin_america.index, latin_america[" Population"], label='Latin America', color='yellow')
text_latin_america = ax.text(1, 1, "abc", color="yellow")
annotation_latin_america = ax.annotate("", xy=(latin_america.index[0], latin_america[" Population"].iloc[0]),
                                         xytext=(10, 10), textcoords="offset points", ha='right', fontsize=10, color='yellow')
 
# Add legend
ax.legend()
 
# Set x-axis and y-axis labels
ax.set_xlabel('Years from 1950 to 2100, Laurent Le Grin, data source: Macrotrends')
ax.set_ylabel('Population in billion')
 
# Function to initialize the animation
def init():
    line_china.set_data([], [])
    annotation_china.set_text("")
    line_india.set_data([], [])
    annotation_india.set_text("")
    line_latin_america.set_data([], [])
    annotation_latin_america.set_text("")
    line_africa.set_data([], [])
    annotation_africa.set_text("")
    return line_china, annotation_china, line_india, annotation_india, line_latin_america, annotation_latin_america, line_africa, annotation_africa
 
# Function to update the animation
def update(frame):
    line_china.set_data(china.index[:frame], china[" Population"][:frame])
    text_china.set_position((china.index[frame], china[" Population"].iloc[frame]))
    text_china.set_text("China")
    annotation_china.set_position((china.index[frame], china[" Population"].iloc[frame]))
    annotation_china.set_text(f"China: {china[' Population'].iloc[frame]:,.2f} billion")
 
    line_india.set_data(india.index[:frame], india[" Population"][:frame])
    text_india.set_position((india.index[frame], india[" Population"].iloc[frame]))
    text_india.set_text("India")
    annotation_india.set_position((india.index[frame], india[" Population"].iloc[frame]))
    annotation_india.set_text(f"India: {india[' Population'].iloc[frame]:,.2f} billion")
 
    line_latin_america.set_data(latin_america.index[:frame], latin_america[" Population"][:frame])
    text_latin_america.set_position((latin_america.index[frame], latin_america[" Population"].iloc[frame]))
    text_latin_america.set_text("Latam")
    annotation_latin_america.set_position((latin_america.index[frame], latin_america[" Population"].iloc[frame]))
    annotation_latin_america.set_text(f"Latam: {latin_america[' Population'].iloc[frame]:,.2f} billion")
 
    line_africa.set_data(africa.index[:frame], africa[" Population"][:frame])
    text_africa.set_position((africa.index[frame], africa[" Population"].iloc[frame]))
    text_africa.set_text("Africa")
    annotation_africa.set_position((africa.index[frame], africa[" Population"].iloc[frame]))
    annotation_africa.set_text(f"Africa: {africa[' Population'].iloc[frame]:,.2f} billion")
 
    return line_china, annotation_china, line_india, annotation_india, line_latin_america, annotation_latin_america, line_africa, annotation_africa
 
# Create the animation
 
num_frames = len(china)
anim = FuncAnimation(fig, update, frames=num_frames, init_func=init, interval=300, blit=False, repeat=False)
 
# Sauvegarder l'animation
anim.save("C:\\Users\\laure\\python\\test.gif", writer='pillow', fps=25)
 
# Show the plot (optional, you can comment this line if you don't want to display the plot)
plt.show()