Conversion de graphique Matplotlib en graphique

Table des matières

Conversion de graphique Matplotlib en graphique

Avez-vous déjà voulu créer directement Plotly graphiques à partir d’une trame de données?

Pandas utilise actuellement Matplotlib comme backend de traçage par défaut. Depuis la version 0.25, il a également prend en charge d’autres backends tel que Bokeh. Cependant, Plotly n’est pas actuellement pris en charge. Par conséquent, j’ai décidé de voir s’il était possible de convertir un graphique Matplotlib en son équivalent Plotly.

Voici le code complet si vous souhaitez suivre cet article.

La première étape a consisté à inspecter la façon dont chacune des bibliothèques représentait les parcelles en interne.

Le fonctionnement interne des deux bibliothèques est si bien résumé que, pour la plupart des fins de traçage courantes, nous n’avons presque jamais besoin de bricoler avec les internes. amène le traçage à un niveau d’abstraction encore plus élevé. Vous appelez simplement sur une trame de données, en spécifiant éventuellement le type de tracé, pour un tracé instantané – pas besoin de créer une figure vide, de définir des étiquettes d’axe, des légendes, etc. Par exemple.,

Propriétés des axes Matplotlib

J’ai commencé par examiner , le objet retourné par . Après une recherche rapide, j’ai trouvé que les objets ont un méthode qui renvoie leurs propriétés sous forme de dictionnaire.

Voici un graphique à barres de mon cahier Kaggle contenant EDA sur les données de batailles et de décès de Game of Thrones.

Sous le graphique se trouve un extrait de ses propriétés renvoyé par .

le l’attribut contient le objets rendus sous forme de barres. Naturellement, s encapsule la plupart des informations de traçage (coordonnées x, hauteur et largeur). est le titre de l’intrigue et et sont respectivement les titres des axes x et y.

Propriétés des figures

Voici le rendu Plotly du graphique à barres ci-dessus. Ses propriétés sont en dessous.

est l’attribut qui contient presque toutes les informations requises pour le tracé ci-dessus. Sous le attribut, , , et contiennent le titre du tracé et les titres des axes.

Les chiffres de Matplotlib contre les chiffres de Plotly

Notez que si une figure Plotly est la contrepartie de niveau supérieur d’une figure Matplotlib, une Figure complotement est un concept différent d’un Figurine Matplotlib.

Cependant, nous avons directement reflété les propriétés du même si c’est contenu à l’intérieur de la figure. Ceci est dû au fait contient tous nos objets d’intérêt.

Cependant, si la figure contenait des sous-tracés comme indiqué ci-dessous, nous devrions refléter les propriétés de chacun des sous-tracés. Remarquez les quatre objets contenus dans la figure .

Ici, nous ferons référence à comme on vient de .

Convertisseur de graphique à barres

Armé de la compréhension de la section précédente, j’ai écrit la fonction suivante pour convertir un graphique à barres Matplotlib donné en graphique à barres. Il prend un seul argument de type .

Il effectue les étapes suivantes.

  1. Extrait tous les objets rectangulaires de l’axe.
  2. Construit des listes de coordonnées x, largeurs, hauteurs et couleurs des rectangles. Notez qu’il convertit les couleurs dans un format que Plotly comprend.
  3. Construit des listes de positions de tick et d’étiquettes.
  4. Crée un objet contenant un seul .
  5. Ajoute des titres et des ticks.

Convertisseur de nuage de points

La fonction suivante prend un Matplotlib contenant un nuage de points et renvoie un Plotly contenant le nuage de points correspondant.

Considérez le diagramme de dispersion Matpotlib suivant.

Si vous le passez à la fonction ci-dessus, vous obtenez le diagramme de dispersion Plotly ci-dessous.

Limites

Bien que cette approche fonctionne pour une gamme étroite de cas d’utilisation de traçage, elle est hacky et ne convient pas à une gamme plus large de cas d’utilisation. Cela peut être facilement vu en exécutant une variété de tracés via la fonction de conversion et en observant la sortie. Les autres limitations sont les suivantes.

  1. Terrain légendes ne sont pas mappés. Si vous créez un graphique à barres groupé dans Plotly à l’aide de ou , les informations de regroupement sont conservées. Contrairement à Plotly, cependant, les informations de regroupement des barres ne sont pas stockées explicitement sous le capot dans Matplotlib. Par conséquent, pour obtenir un « vrai » graphique à barres groupées dans Plotly, nous devons en quelque sorte déduire les informations de regroupement à partir du graphique Matplotlib. En outre, je ne pouvais pas trouver un moyen direct d’ajouter une légende à une figure Plotly en dehors de ajout de traces avec un nom et .
  2. Les étiquettes de survol affichent un minimum d’informations. Si vous créez un graphique à l’aide de , les étiquettes de survol sont automatiquement remplies d’informations utiles, ce qui est l’une des fonctionnalités les plus intéressantes de Plotly. Tu pourrais encore personnaliser les étiquettes de survol, en tout cas, pour afficher plus d’informations.
  3. Les propriétés internes sont sujettes à changement. Si une modification incompatible en amont est introduite dans l’une des bibliothèques, le code de conversion peut se casser et doit être mis à jour.

Check-out Boutons de manchette, une bibliothèque tierce qui ajoute un méthode aux trames de données. est Plotly as est à Matplotlib.

Bokeh est une bibliothèque de traçage cool et interactive. Vous pouvez le définir comme vos pandas traçage du backend en exécutant .

Pendant ce temps, Nicolas Kruchten (VP produit chez Plotly) a récemment commenté que Plotly pourrait être ajouté comme option de back-end de traçage aux pandas dans la prochaine version!