[PYTHON] Créez un graphique empilé correspondant aux directions positives et négatives avec matplotlib

Aperçu

Créez un graphique empilé ** qui correspond aux directions positive et négative comme indiqué ci-dessous.

sample.png

Environnement où l'opération a été confirmée

Créé et confirmé pour fonctionner avec Google Colab.

python     version 3.6.9
numpy      version 1.18.5
pandas     version 1.1.2
matplotlib version 3.2.2

Préparation

Permet au japonais d'être utilisé dans les graphiques matplotlib.

python


!pip install japanize_matplotlib

Chargez la bibliothèque.

python


%reset -f
import sys
import pandas as pd
import numpy as np
import japanize_matplotlib
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.patheffects as pe 
pv = '.'.join([ str(v) for v in sys.version_info[:3] ])
print(f'python     version {pv}')
print(f'numpy      version {np.__version__}')
print(f'pandas     version {pd.__version__}')
print(f'matplotlib version {matplotlib.__version__}')

Préparez des exemples de données.

python


df = pd.DataFrame()
df['Classification']=['Élèves du collège','Lycéen','Étudiant du Collège']
df['Se mettre d'accord']=[10,20,30]
df['Si quelque chose, je suis d'accord']=[45,50,45]
df['Si quelque chose d'en face']=[30,20,20]
df['Opposition']=[15,10,5]
display(df)

2020-10-11_21h21_05.png

Pour ces données, «d'accord» et «plutôt d'accord» sont empilés sur le côté gauche, et «plutôt pas d'accord» et «pas d'accord» sont empilés sur le côté droit.

code

python


def draw(df, y_column,x_columns,colors,x_range):

  left_columns ,right_columns = x_columns
  left_colors,right_colors = colors

  #Créer un graphique 1 par 2
  fig,ax = plt.subplots(nrows=1, ncols=2, figsize=(6,3), facecolor='white',sharey='row',dpi=150)

  #Effacer la bordure
  for a in ax:
    for x in ['top','bottom','left','right']:
      a.spines[x].set_visible(False) 
      a.tick_params(axis='y',left=False) 

  #Graphique à gauche
  acc = np.zeros(len(df))
  for colum,color in reversed(list(zip(left_columns ,left_colors))):
    s = df[colum]
    ax[0].barh(df[y_column],s,left=acc,color=color,label=colum)
    for i in range(len(df)):
      t = ax[0].text(acc[i]+s[i]/2,i,f'{s[i]}%', ha='center',va='center')
      t.set_path_effects([pe.Stroke(linewidth=3, foreground='white'), pe.Normal()])
    acc+=s

  #Graphique à droite
  acc = np.zeros(len(df))
  for colum,color in zip(right_columns,right_colors):
    s = df[colum]
    ax[1].barh(df[y_column],s,left=acc,color=color,label=colum)
    for i in range(len(df)):
      t = ax[1].text(acc[i]+s[i]/2,i,f'{s[i]}%', ha='center',va='center')
      t.set_path_effects([pe.Stroke(linewidth=3, foreground='white'), pe.Normal()])
    acc+=s

  #Guide d'utilisation
  ha,la = ax[0].get_legend_handles_labels()
  ax[0].legend(reversed(ha),reversed(la),bbox_to_anchor=(0.95, 1.05), loc='lower right',ncol=len(left_columns), borderaxespad=0,frameon=False)
  ax[1].legend(bbox_to_anchor=(0.05, 1.05), loc='lower left',ncol=len(right_columns), borderaxespad=0,frameon=False)

  #Tracez une ligne au centre
  ax[1].axvline(x=0,ymin=0,ymax=1,clip_on=False,color='black',lw=1)

  ax[0].set_xlim(x_range[0],0) #Le graphique de gauche fait basculer l'axe X
  ax[1].set_xlim(0,x_range[1])

  fig.subplots_adjust(wspace=0.0) #Définissez la distance entre les graphiques gauche et droit sur zéro
  plt.savefig('test.png')
  plt.show()

#Créer un graphique avec des exemples de données
draw(df,'Classification',
     [['Se mettre d'accord','どちらかと言えばSe mettre d'accord'],['Si quelque chose d'en face','Opposition']],
     [['tab:blue','tab:cyan'],['tab:pink','tab:red']],[80,80])

Résultat d'exécution

sample.png

Recommended Posts

Créez un graphique empilé correspondant aux directions positives et négatives avec matplotlib
Créer un graphique avec des bordures supprimées avec matplotlib
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Je souhaite créer manuellement une légende avec matplotlib
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
J'ai créé un graphique à barres empilées avec matplotlib de Python et ajouté une étiquette de données
Créer un message correspondant à la localisation avec la chaîne de traduction python
[Dessin graphique] J'ai essayé d'écrire un graphique à barres multi-séries avec matplotlib et seaborn
Dessinez un graphique lâche avec matplotlib
Écrire un histogramme empilé avec matplotlib
Créez un nuage de mots avec uniquement des mots positifs / négatifs sur Twitter
J'ai essayé de créer des taureaux et des vaches avec un programme shell
Je veux créer un graphique avec des lignes ondulées au milieu avec matplotlib (je veux manipuler l'impression)
Comment dessiner un graphique avec Matplotlib
(Matplotlib) Je veux dessiner un graphique avec une taille spécifiée en pixels
Comment dessiner un graphique à barres qui résume plusieurs séries avec matplotlib
Graphiques de fonctions triangulaires avec numpy et matplotlib
Créez un environnement Python 3 avec pyenv sur Mac et affichez des graphiques Network X
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
Utilisez la commande [shell] pour compresser par zip n'importe quel fichier pour créer un fichier et supprimer le fichier d'origine.
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Dessinez une surface plane avec un graphique 3D matplotlib
Comment dessiner un graphique à 2 axes avec pyplot
Étapes pour créer un bot Twitter avec Python
Procédure de création d'application multi-plateforme avec kivy
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Créez une application graphique native avec Py2app et Tkinter
Comment créer un sous-menu avec le plug-in [Blender]
Essayez de créer un Checkbutton dynamiquement avec Tkinter en Python
Créez un lot d'images et gonflez avec ImageDataGenerator
Créer une visionneuse de modèle 3D avec PyQt5 et PyQtGraph
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
[Python] Road to the Serpent (5) Jouez avec Matplotlib
[Linux] Créez un auto-certificat avec Docker et apache
Procédure pour créer un Job qui extrait une image Docker et la teste avec des actions Github
Étapes pour configurer Pipenv, créer une application CRUD avec Flask et la conteneuriser avec Docker
Comment tracer beaucoup de légendes en changeant la couleur du graphique en continu avec matplotlib
Graphique de bande avec matplotlib
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
Comment gérer un README pour github et PyPI
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
Probablement le moyen le plus simple de créer un pdf avec Python 3
Créez des applications, enregistrez des données et partagez-les avec un seul e-mail
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Créer un graphique SVG avec matplotlib avec heroku (affiché en japonais)
Créez un script de déploiement avec fabric et cuisine et réutilisez-le
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Comment créer une trame de données et jouer avec des éléments avec des pandas
Je veux créer un histogramme et superposer la courbe de distribution normale dessus. édition matplotlib
[Python] Une infrastructure de données permettant d'acquérir et de publier des tweets de l'API Twitter vers BigQuery a été conçue sur GCP (avec un score négatif / positif)