[PYTHON] 4 Techniken zum Erstellen von Diagrammen für Papiere und Präsentationsmaterialien mit matplotlib

9. September 2017 Bekanntmachung über die Veröffentlichung von "Einführung in Jupyter [Praxis] für Python-Benutzer" (hinzugefügt am 29.08.2017)

Ich habe das Buch "Jupyter [Übung] Einführung für Python-Benutzer" mitautorisiert.

Obwohl nicht im Titel enthalten, wird auch ausführlich erklärt, wie Pandas, Matplotlib und Bokeh verwendet werden. Was in diesem Artikel geschrieben wird, ist auch verständlicher geschrieben. Ich habe es mit dem Ziel geschrieben, ein Muss zu werden, wenn ich Jupyter, Pandas, Matplotlib und Bokeh benutze. Schauen Sie also bitte mal rein.

"Einführung in Jupyter [Übung] für Python-Benutzer" (Takahiro Ikeuchi, Kaoruko Katayanagi, Emma Iwao, @driller, Technical Review)


Dieser Artikel ist der Artikel zum 13. Tag von Python Advent Calendar 2015 --Adventer.

Einführung

Seit ich mit der Datenanalyse in Python angefangen habe, möchte ich Diagramme für Papiere und Präsentationsmaterialien in Python erstellen. Es gibt verschiedene Zeichenwerkzeuge, aber ich bin zu dem Schluss gekommen, dass matplotlib als einfaches Diagramm für Drucksachen wie Papiere gut zu sein scheint, und ich habe verschiedene Zeichnungen mit matplotlib ausprobiert. Heute möchte ich vier Techniken vorstellen, die ich durch Versuch und Irrtum gelernt habe: 1) Zeichnen eines Überlagerungsbalkendiagramms, 2) Festlegen von Farben im Detail, 3) Platzieren der Legende außerhalb des Rahmens und 4) Einfügen der Figur in die Leinwand. Ich denke.

Umgebung

Windows7 + Anaconda(Python3.5)

Erstellen Sie einen Demo-Datensatz

Dieses Mal habe ich eine Demo mit numerischen Werten erstellt, die entsprechend verteilt sind. Numpys random.normal wird zum Generieren von Daten verwendet, mit denen Sie den Durchschnittswert, die Standardabweichung und die Anzahl der Generationen angeben können.

python


import numpy as np  #Zur Generierung von Demo-Daten. Es hat nichts mit dem Hauptthema zu tun.
import matplotlib.pyplot as plt  #2D-Plotbibliothek, die das Zentrum des heutigen Themas darstellt
import matplotlib.cm as cm  #Klasse, um die für das Diagramm verwendete Farbe im Detail anzugeben
from IPython.display import Image  #Klasse zum Importieren von Diagrammen in Notizbücher

plt.rcParams['font.size'] = 14 #Stellen Sie die Schriftgröße ein

x = np.array(range(1, 25))
y1 = np.random.normal(20, 5, 24)
y2 = np.random.normal(30, 5, 24)
y3 = np.random.normal(40, 5, 24)
y4 = np.random.normal(50, 5, 24)
y5 = np.random.normal(60, 5, 24)

__Technik 1 Was ist beim Schreiben eines gestapelten Balkendiagramms zu tun? __ Wenn Sie mit matplotlib einfach nacheinander numerische Werte in einer Abbildung zeichnen, wird der zuvor gezeichnete Balken durch den später gezeichneten Balken überschrieben. Wenn daher n Werte (V1, V2, V3, ..., Vn) in Schichten gezeichnet werden, gilt V1 + V2 + ... + Vn, V1 + V2 + ... + Vn-1, .. Es ist notwendig, .. und integrierte Werte zu schaffen und in der Reihenfolge vom Größten zu zeichnen. Es gibt viele coolere Möglichkeiten zu schreiben, aber wenn Sie es einfach schreiben, erstellen Sie einen Zeichnungsdatensatz mit dem folgenden Gefühl.

#Erstellen Sie ein Dataset für Overlay-Balkendiagramme
dataset = {'dat1':(y1+y2+y3+y4+y5), 
           'dat2':(y2+y3+y4+y5), 
           'dat3':(y3+y4+y5), 
           'dat4':(y4+y5), 
           'dat5':y5}

__Technik 2 Festlegen eines feinen Farbsatzes __ Wenn Sie nur das grundlegende Rot (r), Grün (g) und Blau (b) schreiben, sieht das Diagramm etwas schlampig aus. Verwenden Sie daher die cm-Klasse von matplotlib, um es etwas modischer aussehen zu lassen. Ausführliche Farbinformationen finden Sie unter hier.

Dieses Mal habe ich die Farben verwendet, die aus mehreren Farbskalen extrahiert wurden.

#Farbset-Erstellung
colors = [cm.RdBu(0.85), cm.RdBu(0.7), cm.PiYG(0.7), cm.Spectral(0.38), cm.Spectral(0.25)]

Diagrammzeichnung

Jetzt ist es Zeit zu zeichnen. In dieser Demo habe ich eine Funktion erstellt, um die Bedingungen zu ändern und wiederholt auszuführen.

 #Zeichnungsfunktion erstellen
def plot(bbax, bbay, bap, adj, adjl, adjr):
    
    fig, ax1 = plt.subplots(1, 1, figsize=(12, 5))

    ax1.bar(x, dataset['dat1'], color=colors[0], edgecolor='w', align='center', label='Data1')
    ax1.bar(x, dataset['dat2'], color=colors[1], edgecolor='w', align='center', label='Data2')
    ax1.bar(x, dataset['dat3'], color=colors[2], edgecolor='w', align='center', label='Data3')
    ax1.bar(x, dataset['dat4'], color=colors[3], edgecolor='w', align='center', label='Data4')
    ax1.bar(x, dataset['dat5'], color=colors[4], edgecolor='w', align='center', label='Data5')
    
    #Legendenzeichnung(Positionsbezeichnung)
    if bap == 999:
        ax1.legend(bbox_to_anchor=(bbax, bbay))
    else:
        ax1.legend(bbox_to_anchor=(bbax, bbay), borderaxespad=bap)

    #Größenanpassung
    if adj != 0:
        plt.subplots_adjust(left = adjl, right = adjr)

    #Dateiausgabe
    fname = 'fig' + str(bbax) + str(bbay) + str(bap) + str(adj) + str(adjl) + str(adjr) + '.png'
    plt.savefig(fname, dpi = 300, format='png')

__Technik 3 Legendenpositionierung __ Die Position der Legende ist Kann platziert werden, aber hier wird die Ankerposition für die Positionierung angegeben. Wenn Sie die Position nicht angeben, wird die Legende zunächst in der oberen rechten Ecke angezeigt (siehe Abbildung unten). Fig. 1
Abb. 1 Standard-Legendenlayout

Daher wird der Anker der Legende von bbox_to_anchor angegeben. Mit diesem Code

    ax1.legend(bbox_to_anchor=(bbax, bbay))

(In diesem Code wird 999 angegeben, wenn der später beschriebene Borderaxespad nicht angegeben ist.) Wenn Sie die Ankerposition als (0, 0), (0, 1), (1, 0), (1, 1) angeben und zeichnen, wird die Legende in der folgenden Positionsbeziehung angeordnet.

Fig. 2
  Abb. 2 Schematische Darstellung des Legendenlayouts

Mit anderen Worten, es gibt an, wo sich die obere rechte Ecke der Legende am Rand der Figur befindet. Übrigens gibt es eine subtile Lücke zwischen der Grenze und der Legende. Dies scheint eine kleine Lücke in den Standardeinstellungen zu sein. Verwenden Sie die Option borderaxepad, um diese Lücke anzupassen.

Vom Code

borderaxespad=bap

Es ist der Teil von. Durch Setzen von bap = 0 werden die subtilen Lücken in Abb. 2 beseitigt. Das schematische Diagramm zeigt die folgende Positionsbeziehung.

Fig. 3

Abb. 3 Anordnung der Legende bei gesetztem borderaxepad = 0

Da ich diesmal baq = 0 angegeben habe, überlappen sich die Ecke des Rahmens und die Ecke der Legende genau, aber Sie können den Abstand vom Rand anpassen, indem Sie den Wert ändern. Durch Erhöhen der Anzahl wird die Ankerposition um den angegebenen Betrag entfernt.

Nachdem Sie die Positionsbeziehung zwischen der Legende und dem Rand der Figur erfasst haben, zeigt die folgende Abbildung die Positionsinformationen.

graph_anchor.png Abb. 4 Positionsinformationen des Diagramms

Das heißt, die Position des linken Randes ist x = 0, die Position des rechten Randes ist x = 1, die Unterseite ist y = 0 und die Oberseite ist y = 1. Mit anderen Worten, wenn Sie rechts außerhalb des Rahmens schreiben, können Sie den Wert von x größer als 1 machen.

Jetzt ist es Zeit, die Legende nach außen zu zeichnen. Dieses Mal habe ich bbox_to_anchor = (1.2, 1) gesetzt, um es nach rechts draußen zu bringen.

Jetzt können Sie die Legende draußen schreiben. fig1.210000.png Abb. 5 Die Figur mit der Legende auf der Außenseite

__Technik 4 Platzierung in der Leinwand __ Ich kann die Positionsbeziehung verstehen, ich kann die Legende perfekt arrangieren und ich fühle, dass ich damit zufrieden bin, aber natürlich endet sie hier nicht. Wie Sie in Abb. 5 sehen können, ist die Legende in zwei Hälften geschnitten. Wenn Sie das Diagramm in eine Datei ausgeben, sieht es folgendermaßen aus.

Dies liegt daran, dass die Grafik + Legende zu groß für die Leinwand ist, auf der die Grafik + Legende gezeichnet wird. Einfach ausgedrückt befindet sich der Rand der Leinwand an der blauen Linie in der folgenden Abbildung.

Fig. 6 Abb. 6 Abbildung mit außen platzierter Legende (mit Rand)

Verwenden Sie die Option subplots_adjust, um dies anzupassen. Der folgende Teil des Codes.

 plt.subplots_adjust(left = adjl, right = adjr)

Dieses Mal wird `` `subplots_adjust``` angewendet, wenn adj ungleich Null ist.

`subplots_adjust``` wird ebenfalls basierend auf den Positionsinformationen in Fig. 4 eingestellt. Mit anderen Worten, geben Sie an, wo der linke und der rechte Rand der Figur auf der Leinwand platziert werden sollen. Wie bei der Abbildung hat die Leinwand am linken Rand Null und am rechten Rand 1. Wenn subplot_adust = (0, 1) ``, befindet sich der linke Rand an der Nullposition auf der Leinwand und der rechte Rand an der 1-Position. In der Abbildung befindet sich der linke Rand immer links vom rechten Rand, sodass der Wert am linken Rand nicht größer sein kann als der Wert am rechten Rand.

Stellen Sie die vorherige Abbildung so ein, dass sie auf die Leinwand passt. Diesmal setze ich `subplots_adjust = (0.1, 0.8)`. Das Ausgabeergebnis ist wie folgt.

Fig. 7 Abb.7 Subplots_adjusted figure (mit Rand)

Es passt gut.

abschließend

Wie waren die 4 Techniken zum Erstellen von Diagrammen für Papiere und Präsentationsmaterialien mit matplotlib? Das Jupyter-Notizbuch, das ich für diesen Beitrag erstellt habe, wird später auf GitHub hochgeladen. Wenn Sie also interessiert sind, schauen Sie bitte auch dort nach.

2015/12/13 22:18 Jupyter Notebook wurde auf GitHub hochgeladen. https://github.com/nobolis/pydata_workbook/blob/master/matplotlib_tips/matplotlib_tips.ipynb

Recommended Posts

4 Techniken zum Erstellen von Diagrammen für Papiere und Präsentationsmaterialien mit matplotlib
Zeichnen Sie Schwarzweißdiagramme, die für Papiere mit Matplotlib oder Pylab geeignet sind
Erste Schritte mit dem Zeichnen mit matplotlib: Erstellen von Diagrammen aus Datendateien
Befehle beim Erstellen von SNS mit Django
Erläuterung zum Erstellen einer Anwendung zum Anzeigen von Bildern und Zeichnen mit Python
Japanische Einstellungen für Matplotlib- und Seaborn-Achsen
Selen: Warten Sie mit UND / ODER auf das Element
Heat Map für die Rastersuche mit Matplotlib
[matplotlib] Beispielfunktion zur Erstellung von Graphen für wissenschaftliche Arbeiten
Zeichnen Sie Dreiecksfunktionen mit Numpy und Matplotlib
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 11 und 12 Einführung in Pandas Matplotlib