[PYTHON] Erstellen Sie mit matplotlib ein gestapeltes Diagramm, das sowohl der positiven als auch der negativen Richtung entspricht

Überblick

Erstellen Sie ein gestapeltes Diagramm **, das sowohl der positiven als auch der negativen Richtung entspricht (siehe unten).

sample.png

Umgebung, in der der Betrieb bestätigt wurde

Erstellt und bestätigt für die Arbeit mit Google Colab.

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

Vorbereitung

Ermöglicht die Verwendung von Japanisch in Matplotlib-Diagrammen.

python


!pip install japanize_matplotlib

Laden Sie die Bibliothek.

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__}')

Bereiten Sie Beispieldaten vor.

python


df = pd.DataFrame()
df['Einstufung']=['Mittelschüler','Schüler','Student']
df['Zustimmen']=[10,20,30]
df['Wenn überhaupt, stimme ich zu']=[45,50,45]
df['Wenn überhaupt etwas Gegenteiliges']=[30,20,20]
df['Opposition']=[15,10,5]
display(df)

2020-10-11_21h21_05.png

Für diese Daten sind auf der linken Seite "zustimmen" und "etwas zustimmen" und auf der rechten Seite "etwas nicht zustimmen" und "nicht zustimmen" gestapelt.

Code

python


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

  left_columns ,right_columns = x_columns
  left_colors,right_colors = colors

  #Erstellen Sie ein 1-mal-2-Diagramm
  fig,ax = plt.subplots(nrows=1, ncols=2, figsize=(6,3), facecolor='white',sharey='row',dpi=150)

  #Löschen Sie den Rand
  for a in ax:
    for x in ['top','bottom','left','right']:
      a.spines[x].set_visible(False) 
      a.tick_params(axis='y',left=False) 

  #Grafik links
  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

  #Grafik rechts
  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

  #Gebrauchsanweisung
  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)

  #Zeichnen Sie eine Linie in der Mitte
  ax[1].axvline(x=0,ymin=0,ymax=1,clip_on=False,color='black',lw=1)

  ax[0].set_xlim(x_range[0],0) #Das Diagramm links kippt die X-Achse
  ax[1].set_xlim(0,x_range[1])

  fig.subplots_adjust(wspace=0.0) #Setzen Sie den Abstand zwischen dem linken und dem rechten Diagramm auf Null
  plt.savefig('test.png')
  plt.show()

#Erstellen Sie ein Diagramm mit Beispieldaten
draw(df,'Einstufung',
     [['Zustimmen','どちらかと言えばZustimmen'],['Wenn überhaupt etwas Gegenteiliges','Opposition']],
     [['tab:blue','tab:cyan'],['tab:pink','tab:red']],[80,80])

Ausführungsergebnis

sample.png

Recommended Posts

Erstellen Sie mit matplotlib ein gestapeltes Diagramm, das sowohl der positiven als auch der negativen Richtung entspricht
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Ich möchte manuell eine Legende mit matplotlib erstellen
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Ich habe ein gestapeltes Balkendiagramm mit matplotlib von Python erstellt und eine Datenbeschriftung hinzugefügt
Erstellen Sie eine Nachricht, die der Lokalisierung entspricht, mit einer Python-Übersetzungszeichenfolge
[Grafikzeichnung] Ich habe versucht, ein mehrreihiges Balkendiagramm mit Matplotlib und Seaborn zu schreiben
Zeichnen Sie mit matplotlib ein loses Diagramm
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Erstellen Sie eine Wortwolke mit nur positiven / negativen Wörtern auf Twitter
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich möchte mit matplotlib ein Diagramm mit Wellenlinien in der Mitte erstellen (ich möchte den Eindruck manipulieren).
So zeichnen Sie ein Diagramm mit Matplotlib
(Matplotlib) Ich möchte ein Diagramm mit einer in Pixel angegebenen Größe zeichnen
So zeichnen Sie mit matplotlib ein Balkendiagramm, das mehrere Serien zusammenfasst
Zeichnen Sie Dreiecksfunktionen mit Numpy und Matplotlib
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Verwenden Sie den Befehl [shell], um eine beliebige Datei zu komprimieren, um eine Datei zu erstellen und die Originaldatei zu löschen.
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Zeichnen Sie eine flache Oberfläche mit einem Matplotlib-3D-Diagramm
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Schritte zum Erstellen eines Twitter-Bots mit Python
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Erstellen Sie mit PyQt5 und PyQtGraph einen 3D-Modell-Viewer
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
[Python] Weg zur Schlange (5) Spiele mit Matplotlib
[Linux] Erstellen Sie ein Selbstzertifikat mit Docker und Apache
Schritte zum Erstellen eines Jobs, der ein Docker-Image abruft und mit Github-Aktionen testet
Schritte zum Einrichten von Pipenv, Erstellen einer CRUD-App mit Flask und Containerisieren mit Docker
Wie man zeichnet, indem man die Farbe des Diagramms kontinuierlich mit matplotlib ändert und einfach viele Legenden anordnet
Banddiagramm mit Matplotlib
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
So verwalten Sie eine README-Datei für Github und PyPI
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Erstellen Sie Anwendungen, registrieren Sie Daten und teilen Sie sie mit einer einzigen E-Mail
Minimales Makefile und buildout.cfg, um eine Umgebung mit buildout zu erstellen
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
SVG-Diagramm mit matplotlib mit Heroku erstellen (auf Japanisch angezeigt)
Erstellen Sie ein Bereitstellungsskript mit Stoff und Küche und verwenden Sie es erneut
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
[Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen
So erstellen Sie einen Datenrahmen und spielen mit Elementen mit Pandas
Ich möchte ein Histogramm erstellen und die Normalverteilungskurve darauf überlagern. matplotlib edition
[Python] Eine Dateninfrastruktur zum Erfassen und Veröffentlichen von Tweets von der Twitter-API in BigQuery wurde auf GCP aufgebaut (mit negativer / positiver Bewertung).