J'ai fait un histogramme à partir des enregistrements de 5 sujets et du total des points de l'examen simulé avec matplotlib. ・ Matplotlib ・ Histogramme (plt.hist) ・ Sortie graphique avec instruction for -Codage couleur pour les barres de l'histogramme avec des patchs
・ Les cibles sont la langue nationale, les mathématiques, l'anglais, la société, la science, le score total.
・ 100 points pour chacun des éléments japonais, mathématiques, anglais, société et sciences
・ Csv https://drive.google.com/file/d/1EzctLYN5-UvkmkOgZ7usPgtsQn7bdq5y/view?usp=sharing
・ Le score total est de 500 points.
Chargez la bibliothèque
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Créez un bloc de données. Donnez le nom dans la 1ère à la 6ème colonne. (Si csv est dans le même répertoire que .ipynb de python, vous pouvez utiliser "~~~ .csv".)
df = pd.read_csv("honmachi.csv", names=['langue nationale','Math','Anglais','société','Science','total'])
Vérifiez l'état du stockage. (Vous pouvez maintenant voir la première ligne.)
df.head()
Je n'analyserai pas cette fois, mais describe () vous donnera une vue d'ensemble.
df.describe()
Demandez à ** matplotlib ** d'écrire un histogramme de df ['langue nationale'] par défaut.
plt.hist(df['langue nationale'])
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
plt.show()
La valeur par défaut est subtile. En raison de la nature des résultats des tests ・ Plage de 0 à 100 points ** plage = (0, 100) ** ・ 10 bâtonnets ** bacs = 10 ** Est-ce facile à voir?
Donc, rangez la plage et les bacs entre () de hist dans ** matplotlib **.
# hist()Ajouter à
plt.hist(df['langue nationale'], range=(0,100), bins=10,)
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
plt.show()
Vient ensuite l'axe. ・ Axe X Puisqu'il est compris entre 0 et 100, ** plt.xlim (0, 100) ** ・ Axe Y Il est difficile de comparer avec la hauteur fluctuant selon le sujet. Cette fois, c'est pour 15 personnes, donc pour le moment, 8 personnes seront ** plt.ylim (0,8) **. Si vous spécifiez ici, vous pouvez ajuster ici même si vous dépassez 8 personnes.
plt.hist(df['langue nationale'], range=(0,100), bins=10,)
#Ajouter ici
plt.xlim(0,100)
plt.ylim(0,8)
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
plt.show()
Le prototype ressemble à ceci.
Ajustez un design un peu plus fin. ** 1. Je veux une ligne de quadrillage pour lire l'échelle ** ** 2. Essayez de changer la couleur avec moins de la moitié du score **
plt.hist(df['langue nationale'], range=(0,100), bins=10)
plt.xlim(0,100)
plt.ylim(0,8)
#ajouter à
plt.grid(True)
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
plt.show()
** 2. Changez la couleur avec moins de la moitié du score. ** ** J'ai eu du mal. Dans plt.hist () si (49 points ou moins): range=(0,50), bins=5 autre (50 points ou plus): range=(51,100), bins=5 Même si je pense au code couleur, cela semble difficile.
Est-il possible de re-diviser chaque sujet dans la trame de données en 50 points ou moins et 50 points ou plus à chaque fois?
Cependant, en raison de la nature de cette période, une tige bien fixée se développera, alors puis-je ** coder en couleur la tige **? En d'autres termes, je veux rendre la 1ère à la 5ème barre rouge pour les ** barres. ** ** Ici, j'ai utilisé la valeur de retour dans hist.
Référence
n, bins, patches = hist(○○)
n: données de valeur de l'axe Y
bacs: données de valeur de l'axe X
patchs: liste des patchs
(Patch = ** Objets pour chaque barre de l'histogramme **)
Je veux coder en couleur le 1er au 5 de ce ** patch **
#Mettre le rouge en couleur pour le premier patch (barre)
patches[0].set_facecolor('red')
J'ai utilisé la déclaration for parce que je peux répéter cela du 1er au 5ème.
for i in range(0, 5):
patches[i].set_facecolor('red')
Maintenant que le codage couleur est prêt, ajoutez ceci pour la déclaration.
plt.hist(df['langue nationale'], range=(0,100), bins=10)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
#Postscript
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Il apparaîtra si les patchs ne sont pas définis. Dois-je mettre des ** chemins ** quelque part? Emprunter le précédent ** n, bins, patches = hist () ** et cela a fonctionné.
#Ajouter ici
n, bins, patches = plt.hist(df['langue nationale'], range=(0,100), bins=10)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Achevée.
Le rouge sanglant est également malchanceux, alors ajustez la transparence (alpha). ** alpha = 0,5 ** Ceci est en outre ordonné dans hist ().
# hist()Alpha est également ajouté dans
n, bins, patches = plt.hist(df['langue nationale'], range=(0,100), bins=10, alpha=0.5)
plt.xlim(0,100)
plt.ylim(0,8)
plt.grid(True)
plt.title('langue nationale')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Après cela, utilisez l'instruction for pour tout activer en même temps.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("honmachi.csv", names=['langue nationale','Math','Anglais','société','Science','total'])
#Définissez une variable appelée sujet et traitez un sujet à la fois.
for subject in ['langue nationale','Math','Anglais','société','Science']:
# df[ ]Le contenu est modifié en fonction du sujet.
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( )Si le contenu est également sujet, l'étiquette du titre changera automatiquement.
plt.title(subject)
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Avec cela, 5 feuilles sont sorties à la fois.
Le reste est le score total. Donnez-lui simplement un score parfait de 500. Récupérez le total des trames de données ・ ** plage = (0,500) ** ・ ** plt.xlim (0,500) ** Changez pour et vous avez terminé.
Enfin, je vais rassembler le code utilisé dans cette exigence sans commentaire.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("honmachi.csv", names=['langue nationale','Math','Anglais','société','Science','total'])
for subject in ['langue nationale','Math','Anglais','société','Science']:
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('But')
plt.ylabel('Nombre de personnes')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
n, bins, patches = plt.hist(df['total'], range=(0,500), bins=10, alpha=0.5)
plt.xlim(0,500)
plt.ylim(0,8)
plt.grid(True)
plt.title('total')
plt.xlabel('But')
plt.ylabel('Nombre de personnes')
for i in range(0, 5):
patches[i].set_facecolor('red')
plt.show()
Recommended Posts