Heatmap avec courbes de tendances dans chaque case de la map
Bonjour à tous
Je cherche à faire un script python qui analyse les données d'un fichier json. Le fichier nous donne entre autre une liste de musiques lues et à quelle date.
J'ai réussi avec seaborn et matplotlib à créer une heatmap qui représente la quantité de musiques lues en fonction de l'heure du jour dans la semaine, pour toutes les musiques lues depuis environ 2018 jusqu'à 2023. (pour le contexte)
J'ai de même réussi à tracer une courbe d'évolution des lectures, qui m'indique en fonction du temps la quantité de musiques lues. (pour le contexte, je peux donc voir que globalement, j'écoute de plus en plus de musique)
J'aimerais maintenant cumuler les deux graphiques, et afficher une courbe de tendances pour chaque case de la heatmap, ce qui me permettrait de voir si les musiques lues à une certaine heure de la journée témoignent d'une véritable habitude sur le long terme, ou bien si ces valeurs ont été faites sur une période courte et non habituelle.
Pour ça, j'ai fait un tableau tableau=[[[0] * 30] * 24] * 7 (avec 30 le nombre de points à afficher sur la courbe, donc une "précision" dans laquelle j'entre le nombre de lectures comptées pour une période de temps fixe, pour chaque heure ; 24 et 7 les 24h de la journée et les 7 jours de la semaine)
J'arrive bien à compléter mon tableau, il semble cohérent, je peux donc tracer chacune des courbes associées à chacune des cases de la heatmap. Mais la partie plus délicate arrive maintenant, je ne parviens pas à superposer ces courbes et les afficher toutes ensemble sur la heatmap.
Ma première question est simple, est-ce possible ? :D
Et la deuxième question, est-ce que vous avez des pistes ou des idées sur la façon de faire pour tracer ce que je veux ?
En espérant que mes explications soient suffisamment claires, merci d'avance pour vos réponses et les pistes que vous pourriez me donner ;)
Bonne journée !
- Heatmap avec courbes de tendances dans chaque case de la map
- Google map satellite gratuit - Guide
- Aller à la ligne dans une case excel - Guide
- Telecharger carte google map - Guide
- Google map ma position - Guide
- Itinéraire google map entre deux adresses - Guide
1 réponse
Bonjour,
Qu'entends-tu par superposer les courbes ? Cherches tu as faire des sous-figures ? Note que tu peux parfaitement créer des sous-figures qui impliques des images de différentes natures (graphes, images, etc.)
Ce que je te recommande c'est d'utiliser gridspec.
import matplotlib.pyplot as plt fig = plt.figure() gs = fig.add_gridspec(2, 3) # Créer une grille de 2x3 graphes plt.subplots_adjust(wspace=0.5, hspace=0.5) for i in range(2): for j in range(3): ax = fig.add_subplot(gs[i, j]) ax.set_title(f"Graphe (i, j)") plt.show()
Bonne chance
Merci beaucoup pour ta réponse !
Quand je dis superposer, c'est ajouter au dessus de ma heatmap d'autres courbes, faire une grille de sous figures. En effet, ta suggestion ressemble bien à ce que je veux faire, il faut maintenant que j'ajuste à mes besoins, je vais fouiller un peu et je vous tiendrai au courant !
Un exemple quand même de ce que je voudrais en image, j'arrive à avoir la heatmap d'arrière plan, maintenant il faut ajouter ces courbes par dessus... Au boulot :)
Bonjour :)
Je reviens à la charge après un peu de recherches. En effet, gridspec était une bonne idée, qui m'a permis d'avancer un peu.
J'ai maintenant ma grille de graphiques comme ceci :
J'ai de même ma heatmap comme ceci :
Cependant, les deux figures s'affichent sur une fenêtre séparée, au lieu de se superposer :/
Est-il possible d'afficher les deux figures ensemble, sans qu'elles ne prennent simplement une zone à gauche pour un graphe, et l'autre à droite ? Il me semble avoir vu qu'on pouvait utiliser les axes d'une figure pour en afficher une seconde, mais ceci ne me donne que deux fenêtres distinctes, je dois me tromper dans ma compréhension du mécanisme...
Voici l'extrait de code qui me permet d'arriver à ceci, peut-être qu'il donnera plus d'indications ?
Merci pour votre aide, et dans l'attente de vos conseils et suggestions :)
Bonjour,
Bonne chance
Désolé pour mon retour tardif :/
Merci pour ta réponse !
"Superposer" pour moi veut dire obtenir les deux figures que j'ai actuellement (la heatmap de couleurs en 7*24 cases, et l'ensemble des 7*24 courbes disposées en grille) en une seule figure, l'une par dessus l'autre, pour donner un rendu comme l'illustration que j'ai donné sur mon message du 1er mars.
J'arrive pour le moment à avoir deux figures sur deux fenêtres séparées, ou au mieux 2 figures sur une seule fenêtre, mais l'une à côté de l'autre, je n'arrive cependant pas à obtenir ce rendu :/
J'ai regardé le tuto, et je crois ne pas en saisir toutes les nuances, je parviens à l'utiliser correctement pour faire la grille de 7*24 courbes les unes à côté des autres, cependant impossible d'utiliser cette grille une fois faite pour la placer par au dessus de la heatmap /superposer les deux figures / imbriquer la grille dans la heatmap...
Merci pour ton retour et tes conseils :)
Il faudrait que tu me partages ton code avec les gridspec, mais en gros, si je reprends le lien précédent, en adaptant gs0, on arrive bien à mettre les deux gridspecs l'une au dessus de l'autre :
Bonne chance