Ich habe ein Histogramm aus den Aufzeichnungen von 5 Probanden und den Gesamtpunkten der Scheinprüfung mit matplotlib erstellt. ・ Matplotlib ・ Histogramm (plt.hist) ・ Diagrammausgabe mit for-Anweisung -Farbcodierung für die Balken im Histogramm mit Patches
・ Ziele sind Landessprache, Mathematik, Englisch, Gesellschaft, Naturwissenschaften, Gesamtpunktzahl.
・ 100 Punkte für Japanisch, Mathematik, Englisch, Gesellschaft und Naturwissenschaften
・ Csv https://drive.google.com/file/d/1EzctLYN5-UvkmkOgZ7usPgtsQn7bdq5y/view?usp=sharing
・ Die Gesamtpunktzahl beträgt 500 Punkte.
Laden Sie die Bibliothek
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Erstellen Sie einen Datenrahmen. Geben Sie den Namen in der 1. bis 6. Spalte an. (Wenn sich csv im selben Verzeichnis wie .ipynb von Python befindet, können Sie "~~~ .csv" verwenden.)
df = pd.read_csv("honmachi.csv", names=['Landessprache','Mathematik','Englisch','Gesellschaft','Wissenschaft','gesamt'])
Überprüfen Sie den Speicherstatus. (Sie können jetzt die erste Zeile sehen.)
df.head()
Ich werde diese Zeit nicht analysieren, aber beschreiben () wird Ihnen ein Gesamtbild geben.
df.describe()
Bitten Sie ** matplotlib **, standardmäßig ein Histogramm von df ['Landessprache'] zu schreiben.
plt.hist(df['Landessprache'])
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
plt.show()
Die Standardeinstellung ist subtil. Aufgrund der Art der Testergebnisse ・ Bereich von 0 bis 100 Punkten ** Bereich = (0, 100) ** ・ 10 Sticks ** Behälter = 10 ** Ist es leicht zu sehen?
Ordnen Sie also den Bereich und die Bins in () von hist in ** matplotlib ** an.
# hist()Hinzufügen
plt.hist(df['Landessprache'], range=(0,100), bins=10,)
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
plt.show()
Als nächstes kommt die Achse. ・ X-Achse Da es 0 bis 100 ist, ** plt.xlim (0, 100) ** ・ Y-Achse Es ist schwer mit der Höhe zu vergleichen, die je nach Motiv schwankt. Diesmal ist es für 15 Personen, also werden vorerst 8 Personen ** plt.ylim (0,8) ** sein. Wenn Sie hier angeben, können Sie hier anpassen, auch wenn Sie mehr als 8 Personen haben.
plt.hist(df['Landessprache'], range=(0,100), bins=10,)
#Hier hinzufügen
plt.xlim(0,100)
plt.ylim(0,8)
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
plt.show()
Der Prototyp sieht so aus.
Passen Sie das Design etwas feiner an. ** 1. Ich möchte, dass eine Gitterlinie die Skala liest ** ** 2. Versuchen Sie, die Farbe mit weniger als der Hälfte der Punktzahl zu ändern **
plt.hist(df['Landessprache'], range=(0,100), bins=10)
plt.xlim(0,100)
plt.ylim(0,8)
#hinzufügen
plt.grid(True)
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
plt.show()
** 2. Ändern Sie die Farbe mit weniger als der Hälfte der Punktzahl. ** ** ** Ich hatte es schwer. In plt.hist () if (49 Punkte oder weniger): range=(0,50), bins=5 sonst (50 Punkte oder mehr): range=(51,100), bins=5 Obwohl ich über Farbcodierung nachdenke, scheint es schwierig.
Ist es möglich, jedes Subjekt im Datenrahmen in 50 Punkte oder weniger und 50 Punkte oder mehr jedes Mal neu zu unterteilen?
Aufgrund der Art dieser Zeit wächst jedoch eine ordentlich fixierte Rute. Kann ich die Rute also ** farblich kennzeichnen **? Mit anderen Worten, ich möchte den 1. bis 5. Balken für ** Balken rot machen. ** ** ** Hier habe ich den Rückgabewert in hist verwendet.
Referenz
n, bins, patches = hist(○○)
n: Wertdaten der Y-Achse
Bins: X-Achsen-Wertdaten
Patches: Liste der Patches
(Patch = ** Objekte für jeden Balken im Histogramm **)
Ich möchte den 1. bis 5. dieses ** Patches ** farblich kennzeichnen.
#Stellen Sie für den ersten Patch (Balken) Rot auf Gesichtsfarbe.
patches[0].set_facecolor('red')
Ich habe die for-Anweisung verwendet, weil ich dies vom 1. bis zum 5. wiederholen kann.
for i in range(0, 5):
patches[i].set_facecolor('red')
Nachdem die Vorbereitung für die Farbcodierung abgeschlossen ist, fügen Sie diese zur Anweisung hinzu.
plt.hist(df['Landessprache'], range=(0,100), bins=10)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
#Nachtrag
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Es wird angezeigt, wenn keine Patches definiert sind. Muss ich irgendwo ** Pfade ** setzen? Leihen Sie sich den vorherigen aus ** n, Bins, Patches = hist () ** und es hat funktioniert.
#Hier hinzufügen
n, bins, patches = plt.hist(df['Landessprache'], range=(0,100), bins=10)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Komplett.
Blutrot hat auch Pech, also passen Sie die Transparenz (Alpha) an. ** Alpha = 0,5 ** Dies ist zusätzlich in hist () angeordnet.
# hist()Alpha wird ebenfalls hinzugefügt
n, bins, patches = plt.hist(df['Landessprache'], range=(0,100), bins=10, alpha=0.5)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title('Landessprache')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Verwenden Sie danach die for-Anweisung, um alles auf einmal zu drehen.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("honmachi.csv", names=['Landessprache','Mathematik','Englisch','Gesellschaft','Wissenschaft','gesamt'])
#Legen Sie eine Variable namens Betreff fest und verarbeiten Sie jeweils einen Betreff.
for subject in ['Landessprache','Mathematik','Englisch','Gesellschaft','Wissenschaft']:
# df[ ]Der Inhalt wird je nach Thema geändert.
n, bins, patches = plt.hist(df[subject], range=(0,100), bins=10, alpha=0.5)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
#title( )Wenn der Inhalt ebenfalls Gegenstand ist, ändert sich die Titelbezeichnung automatisch.
plt.title(subject)
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Damit kamen 5 Blätter gleichzeitig heraus.
Der Rest ist die Gesamtpunktzahl. Geben Sie einfach eine perfekte Punktzahl von 500. Erfassen Sie die Gesamtzahl der Datenrahmen Range ** Bereich = (0,500) ** ・ ** plt.xlim (0,500) ** Wechseln Sie zu und Sie sind fertig.
Abschließend werde ich den in dieser Anforderung verwendeten Code kommentarlos zusammenstellen.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("honmachi.csv", names=['Landessprache','Mathematik','Englisch','Gesellschaft','Wissenschaft','gesamt'])
for subject in ['Landessprache','Mathematik','Englisch','Gesellschaft','Wissenschaft']:
n, bins, patches = plt.hist(df[subject], range=(0,100), bins=10, alpha=0.5)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title(subject)
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
n, bins, patches = plt.hist(df['gesamt'], range=(0,500), bins=10, alpha=0.5)
plt.xlim(0,500)
plt.ylim(0,8)
plt.grid(True)
plt.title('gesamt')
plt.xlabel('Ergebnis')
plt.ylabel('Anzahl der Personen')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()