Schreiben Sie ein Kreisdiagramm in Python

Schreiben wir ein "Kreisdiagramm" von Menschen, die von allen in Python gehasst werden. Schreiben Sie außerdem ein "Doppelkreisdiagramm" (double pie_chart) mit Geschlecht im inneren Kreisdiagramm und Generierung im äußeren Kreisdiagramm. So ↓ Wie üblich sind die Argumente von matplotlib verwirrend, daher werde ich sie als Notiz hinterlassen.

pie_chart_#1.png

Daten zum Erstellen eines Kreisdiagramms

Angenommen, Sie haben diese Art von JSON-Daten

Eingabedaten


data={
      "cluster": 1, 
      "member_cnt": 21343, 
      "generation": {"11-15": 284, "81-85": 216, "0-5": 10, 
                     "76-80": 486, "16-20": 840, "56-60": 1938, 
                     "unknown": 558, "61-65": 1561, "86-90": 51, 
                     "51-55": 2504, "46-50": 2639, "6-10": 18, 
                     "31-35": 1501, "41-45": 2410, "36-40": 1954, 
                     "66-70": 1486, "91 over": 23, "26-30": 989, 
                     "21-25": 976, "71-75": 899},
      "gender": {"M": 11652, "F": 9691}
     }

--cluster: Clusternummer (in diesem Fall 1) --member_cnt: Anzahl der Personen im gesamten Cluster --generation: Die Altersgruppe und die Anzahl der dazugehörigen Personen werden im Wörterbuchtyp gespeichert (addiert zur Anzahl der Mitglieder). --gender: Geschlecht und jede Anzahl von Personen werden im Wörterbuchtyp gespeichert (addiert zur Anzahl der Mitglieder)

Handlung

Als Zeichnungsfluss

  1. Erstellen Sie ein äußeres Kreisdiagramm (Generierung)
  2. Erstellen Sie ein inneres Kreisdiagramm (Generierung)
  3. Erstellen Sie einen weißen Kreis auf der innersten Seite Es ist wie es ist.

Laden und Initialisieren des Moduls


# -*- coding: utf-8 -*-
#Für Jupyter Notebook
from IPython.display import display, HTML
%matplotlib inline 

# pie_Für Diagramm
import numpy as np
import matplotlib.pyplot as plt

#Geben Sie die Farben an, die später verwendet werden sollen (geben Sie die gewünschte Farbe an).
c_cycle=("#3498db","#51a62d","#1abc9c","#9b59b6","#f1c40f",
         "#7f8c8d","#34495e","#446cb3","#d24d57","#27ae60",
         "#663399","#f7ca18","#bdc3c7","#2c3e50","#d35400",
         "#9b59b6","#ecf0f1","#ecef57","#9a9a00","#8a6b0e")

Skriptkörper


cluster_num = data['cluster']
member_cnt = data['member_cnt']

'''''''''''''''''''''''''''''''''
Erstellen Sie ein Diagramm für den äußeren Kreis zur Generierung
'''''''''''''''''''''''''''''''''

generation_labels = list()
generation_values = list()

for gen_cat,cnt in sorted(data['generation'].items(),reverse=True,key=lambda x:x[1]): #Anzahl der Mitglieder(cnt)Geben Sie die absteigende Reihenfolge von ein(gen_cat)Sortieren
    generation_labels.append(gen_cat)
    generation_values.append(cnt)

plt.figure(figsize=(10,8)) #Bereiten Sie ein Fenster geeigneter Größe vor
x = np.array(generation_values) #Setzen Sie den Wert zum Zeichnen eines Kreisdiagramms auf np.Dem Array-Typ zuweisen

plt.pie(x,
       labels=generation_labels, #Geben Sie die Beschriftung des Kreisdiagramms an
       colors=c_cycle, #Geben Sie die Farbe des Kreisdiagramms an (die zuvor oben festgelegte).
       wedgeprops={'linewidth': 2,'edgecolor':"white"}, #Fügen Sie dem Kreisdiagramm einen weißen Rand mit einer Dicke von 2 hinzu
       textprops={'color': "white", 'weight': "bold"}, #Textfarbe und -stärke
       pctdistance=0.85, #85 zwischen dem Zentrum und dem Umfang basierend auf dem Wert des Zusammensetzungsverhältnisses%Ausgabe an die Position von (Feineinstellung der Position der Textanzeige)
       startangle=90, #Drehen Sie die Richtung des Kreises um 90 Grad
       counterclock=False, #Mit false gegen den Uhrzeigersinn ausgeben
       autopct=lambda p: '{:.1f}%'.format(p) if p >= 2.5 else '' #2.5%Die folgenden Komponenten verbergen numerische Werte (später beschrieben)
      )

plt.axis('equal') #Erforderlich, um ein kreisförmiges Diagramm ohne Verzerrung auszugeben. Wenn dies nicht angegeben ist, ist es oval


'''''''''''''''''''''''''''''
Erstellen Sie ein inneres Kreisdiagramm für das Geschlecht
'''''''''''''''''''''''''''''

gender_labels = list()
gender_values = list()

for gender,cnt in data['gender'].items():
    gender_labels.append(gender)
    gender_values.append(cnt)
y = np.array(gender_values)

plt.pie(y,
        labels=gender_labels,
        colors=("#00a2ad","#ffcccc"), # Male,Farbzuordnung für weiblich
        wedgeprops={'linewidth': 2,'edgecolor':"white"}, #Fügen Sie einen weißen Rand mit einer Dicke von 2 hinzu
        textprops={'color': "#2c3e50", 'weight': "bold"}, #Textfarbe und -stärke
        radius=0.7, #70%Zeichnen Sie einen Kreis von der Größe von. Da das Geschlecht ein innerer Kreisgraph ist, wird es etwas kleiner ausgegeben.
        labeldistance=0.8, #Die Anzeigeposition des Etiketts beträgt 80 vom Umfang%Anzeige an der Position von
        autopct="%1.1f%%", #Geben Sie das Kompositionsverhältnis mit einer Ziffer nach dem Dezimalpunkt aus
        pctdistance=0.6, #60 zwischen dem Zentrum und dem Umfang des Zusammensetzungsverhältnisses%Ausgabe an die Position von
        startangle=90, #Drehen Sie die Richtung des Kreises um 90 Grad
        counterclock=False #Mit false gegen den Uhrzeigersinn ausgeben
       )
plt.axis('equal') #Korrigieren Sie das Seitenverhältnis. Erforderlich, um ein kreisförmiges Diagramm ohne Verzerrung auszugeben


'''''''''''''''''''''''''''''
Zeichnen Sie ein weißes Kreisdiagramm auf der innersten Seite (lassen Sie es wie ein Donutkreisdiagramm aussehen).
'''''''''''''''''''''''''''''

center_circle = plt.Circle((0,0),0.4,color='white', fc='white',linewidth=1.25) #Center(0,0)Bis 40%Zeichnen Sie einen Kreis mit der Größe von
fig = plt.gcf()
fig.gca().add_artist(center_circle)

# generation+Anzeige der Legende des Geschlechts
lgnd=plt.legend(bbox_to_anchor=(1.0, 0.25, 1.55, 0.5), loc="center left", borderaxespad=0.)

#Anzeige des Titels der Figur
plt.suptitle('cluster#%s (UU=%s)' % (cluster_num,member_cnt),fontsize=25)


#Speichern eines Kreisdiagramms
# bbox~~Wenn es keinen solchen Parameter gibt, ragt die Legende aus dem gespeicherten Bild heraus.
#plt.savefig('./hoge/pie_chart_#{}.png'.format(cluster_num),bbox_exstra_artists=(lgnd),bbox_inches='tight') 
plt.show()

Erläuterung

** Mach die Farbe modisch **

** Kurz gesagt, fügen Sie den Wert, den Sie erstellen möchten, in ein Kreisdiagramm in np.array und die Beschriftung in den Listentyp ein **

** Es scheint, dass die Kuchenfunktion von matplotlib.pyplot Daten automatisch in Prozentwerte konvertiert **

** Verstecke Elemente mit einem kleinen Anteil, um das Aussehen zu verbessern **

Für andere plt.pie-Parameter können Sie dies verstehen, indem Sie den Kommentar im Code auslesen oder den relevanten Teil tatsächlich auskommentieren und sehen, wie sich die Beschreibung ändert.

Ein bisschen schlau

Wenn ich ein Kreisdiagramm der "Generation" schreibe und "Weiß" von "Textprops = {'Farbe':" Weiß "," Gewicht ":" Fett "}" in "Schwarz" geändert wird, sieht es tatsächlich so aus. Masu ↓

pie_chart2_#1.png

Ich möchte diese überlappende Beschriftung gut anzeigen oder löschen, aber da es sich nur um Zeichenkettendaten handelt, kann sie unter Bedingungen wie "2,5% oder weniger ausblenden" oben ("nicht ausgeblendet werden). Ich konnte keinen guten Weg finden. Wenn jemand einen guten Weg dazu kennt, lass es mich wissen ... Daher wird dieser Teil vorerst in weiße Buchstaben umgewandelt und im Hintergrund geschmolzen, um zu betrügen.

Referenz

Recommended Posts

Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie eine Dichotomie in Python
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Schreiben Sie eine einfache Giermethode in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Zeichnen Sie mit matplotlib ein schönes Kreisdiagramm
Schreiben Sie Python in MySQL
Machen Sie einen Screenshot in Python
Schreiben Sie Pandec-Filter in Python
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Schreiben Sie die Beta-Distribution in Python
Schreiben Sie Python in Rstudio (reticulate)
Erstellen Sie ein Lesezeichen in Python
Balkendiagramm Rennen in Python
Zeichne ein Herz in Python
Schreiben Sie ein super einfaches molekulardynamisches Programm in Python
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Schreiben Sie in Python ein logarithmisches Histogramm auf die x-Achse
Wahrscheinlich in einer Nishiki-Schlange (Originaltitel: Vielleicht in Python)
Schreiben Sie einen tabellengesteuerten Test in C.
[Python] Verwalten Sie Funktionen in einer Liste
Drücken Sie einen Befehl in Python (Windows)
Schreiben Sie ein JSON-Schema mit Python DSL
Schreiben Sie einen HTTP / 2-Server in Python
Zeichnen Sie eine Streudiagrammmatrix mit Python
ABC166 in Python A ~ C Problem
Erstellen Sie eine Binärdatei in Python
Schreiben Sie Selentestcode in Python
Löse ABC036 A ~ C mit Python
Implementierung eines einfachen Algorithmus in Python 2
Löse ABC037 A ~ C mit Python
Führen Sie einen einfachen Algorithmus in Python aus
Zeichnen Sie ein CNN-Diagramm in Python
Erstellen Sie eine zufällige Zeichenfolge in Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Beim Schreiben eines Programms in Python
Generieren Sie eine erstklassige Sammlung in Python
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Löse ABC175 A, B, C mit Python
Verwenden Sie print in Python2 lambda expression
Ein einfacher HTTP-Client, der in Python implementiert ist
Führen Sie eine nicht rekursive Euler-Tour in Python durch
Ich habe ein Pay-Management-Programm in Python erstellt!
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Versuchen Sie, ein SYN-Paket in Python zu senden
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Erstellen Sie eine einfache GUI-App in Python
Mit Python Teil 2 ein Herz zeichnen (SymPy Edition)