[PYTHON] Implémentez "Data Visualization Design # 2" avec matplotlib

Qu'est-ce qu'une conception de visualisation de données?

Ceci est un résumé des points de visualisation de données publié en note par Go Ando de THE GUILD, qui est célèbre pour ses services axés sur l'UX et l'interface utilisateur.

https://note.mu/goando/n/n4a2735c3d69d

# 1?

https://qiita.com/skotaro/items/cdb0732ad1ad2a4b6236

Remarques

plt.rcParams['font.family'] = 'Hiragino Sans'  

C'est la partie de.

8. N'utilisez pas le 2ème axe

picture_pc_35cbe51d3cf1f3331ad189ac806eae85.png

#Importation de bibliothèque
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.ticker import MultipleLocator


#Les données
mau = [450,480,500,470,520,550,530,580,620,700,690,720]
g_rate = [0,8,0,-4,10,9,-6,12,4,12,-1,8]
g_rate = [one/100 for one in g_rate]
timeindex = pd.date_range('2019/1', periods=12, freq='MS')
mau = pd.Series(mau, index=timeindex, name='MAU(M)')
g_rate = pd.Series(g_rate,index=timeindex,name='Taux de croissance du mois dernier')

#Pour éviter les erreurs chez les pandas
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

#Paramètres de police
plt.rcParams['font.family'] = 'Hiragino Sans'  
plt.rcParams['font.weight'] = 'heavy'

#Divisé de haut en bas
fig = plt.figure(figsize=(8,5))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

# 1.Changer la couleur et la largeur de la barre
ax1.plot(g_rate.index, g_rate,linewidth=5.,color="saddlebrown")
ax2.bar(mau.index, mau, width=20., color='darkorange', zorder=2, align='center')

# 2.Afficher l'étiquette de l'axe y, spécifier la couleur et la taille de la police
ax1.set_ylabel(g_rate.name,color="saddlebrown",fontsize=14,fontweight='bold')
ax2.set_ylabel(mau.name, color='gray',fontsize=14,fontweight='bold')

# 3.Changer la position de graduation sur l'axe y
ax1.yaxis.set_major_locator(MultipleLocator(500))
ax2.yaxis.set_major_locator(MultipleLocator(500))

# 4.Effacer les graduations des axes x et y,Pour le graphique ci-dessus, effacez tout l'axe des x
ax1.tick_params(labelbottom="off",bottom=False, left=False) 
ax1.set_xticklabels([]) 
ax2.tick_params(bottom=False, left=False)

# 5.Changer la couleur de l'étiquette de graduation de l'axe des x sur l'axe des y
ax1.tick_params(axis='y', colors='dimgray')
ax2.tick_params(axis='x', colors='dimgray')
ax2.tick_params(axis='y', colors='dimgray')

# 6.Afficher la grille de l'axe y, couleur noire pour le graphique ci-dessus
ax1.grid(axis='y',color="black")
ax2.grid(axis='y')

# 7.Effacer le cadre droit
ax1.spines['right'].set_visible(False)
ax2.spines['right'].set_visible(False)

# 8.Changer la couleur du cadre
ax1.spines['bottom'].set_color('dimgray')
ax1.spines['top'].set_color('dimgray')
ax1.spines['left'].set_color('dimgray')
ax2.spines['bottom'].set_color('dimgray')
ax2.spines['top'].set_color('dimgray')
ax2.spines['left'].set_color('dimgray')

# 9.Définir l'étiquette de graduation de l'axe des x sur le mois uniquement
# '%-m'Est-ce que strftime mène la notation zéro aucun mois
ax2.xaxis.set_major_formatter(mdates.DateFormatter('%-m')) 

# 10.Définissez la position de graduation sur l'axe X tous les mois
ax2.xaxis.set_major_locator(mdates.MonthLocator())
ax2.xaxis.set_tick_params(labelsize=12)

#La position de la graduation principale n'est mise à jour que si la figure est dessinée une fois.
fig.canvas.draw()

# 11.Spécification de la plage de l'axe vertical
ax1.set_ylim(-0.20,0.20)
ax2.set_ylim(0,800)
    
# 12.Changement de graduation de l'axe vertical
vals_1 = [-0.2,0,0.2]
ax1.set_yticks(vals_1)
ax1.set_yticklabels(['{:,.0%}'.format(x) for x in vals_1],color="saddlebrown",fontsize=12,fontweight='bold')
vals_2 = [0,400,800]
ax2.set_yticks(vals_2)
ax2.set_yticklabels(['{}'.format(x) for x in vals_2] ,fontsize=12,fontweight='bold')

# 13.Aligner ylabel
axs = [ax1,ax2]
fig.align_ylabels(axs)

temp_5.png

Pour savoir comment définir l'axe vertical sur% dans # 12., je me suis référé à la réponse de stackoverflow [^ 1].

13. renvoyé à la doc officielle de matplotlib [^ 2].

De plus, l'étiquette y peut être écrite verticalement en cassant chaque caractère, mais je ne l'ai pas fait car le code était laid. (S'il vous plaît dites-moi s'il existe un moyen intelligent)

9. Réduisez les éléments au minimum

picture_pc_a37bd978a068d0840f04250ca5b05a3a.png

#Les données
shipment_n = pd.DataFrame([52217, 9113, 4078],
                           index=['iPhone', 'iPad', 'Mac'],
                           columns=['amount'])

fig, ax = plt.subplots(figsize=(6, 3))
ax.bar(shipment_n.index,shipment_n["amount"])

# 1.Effacer le cadre autre que le bas
sides = ['left','right', 'top']
[ax.spines[side].set_visible(False) for side in sides] 

# 2.Changer la couleur du cadre inférieur en gris
ax.spines['bottom'].set_color("dimgray")

# 3.Effacer la graduation de l'axe y
ax.tick_params(left=False, labelleft=False)

# 4.Taille d'étiquette de l'axe X plus grande, couleur grise
ax.tick_params(axis='x', labelsize='xx-large',color="dimgray",labelcolor="dimgray")

# 5.Afficher la valeur réelle au-dessus de la barre
vmax = shipment_n['amount'].max()
for i, value in enumerate(shipment_n['amount']):
    ax.text(i, value+vmax*0.06, f'{value:,}', fontsize='xx-large', va='center', ha='center', color='C0')

tmp6.png

4 est réalisé en appliquant un offset en utilisant vmax.

10. Écrivez le plus grand message clé

picture_pc_c0ccda82a2e6153a56d22b40e1f7d12b.png

#Couleur
ori_blue = "#3674b3"
ori_lightblue = "#b3daff"


# 1.Peindre le tout
plt.rcParams["axes.facecolor"] = (1,1,1,0)

# 2.Rendre le fond bleu
fig, ax = plt.subplots(figsize=(6, 4),facecolor=ori_blue)

# 3.Titre
fig.suptitle("L'iPhone représente 80% des expéditions",color="white",size=24,fontweight='bold',ha='center')

# 4.Terrain en bleu clair
ax.bar(shipment_n.index,shipment_n["amount"],color=ori_lightblue)

# 5.ajouter une description
ax.text(-0.4,shipment_n["amount"].max()*1.2,"Graphique: Appareils d'expédition Apple 2017",color=ori_lightblue,fontsize=12)

#6.Supprimer les cadres autres que ceux du bas
sides = ['left','right', 'top']
[ax.spines[side].set_visible(False) for side in sides] 

# 7.réglage de la couleur du cadre inférieur
ax.spines['bottom'].set_color(ori_lightblue)

# 8.réglage de la plage de l'axe y
ax.set_ylim(0,80000)

# 9.Effacer l'étiquette de graduation de l'axe y
ax.tick_params(left=False, labelleft=False)
    
# 10.paramètre d'étiquette de l'axe x
ax.tick_params(axis='x', labelsize='xx-large',color=ori_lightblue,labelcolor=ori_lightblue)

# 11.Afficher la valeur réelle au-dessus de la barre
vmax = shipment_n['amount'].max()
for i, value in enumerate(shipment_n['amount']):
    ax.text( i,value+vmax*0.06, f'{value:,}', fontsize='xx-large', va='center', ha='center', color=ori_lightblue)

#Lors de la sauvegarde
plt.savefig("savefig_with_facecolor.png ",facecolor=fig.get_facecolor())

tmp8.png

À propos de la couleur, je l'ai réglée d'une manière ou d'une autre. Dans la famille de tête, les coins du fond étaient arrondis, mais cela ne pouvait pas être reproduit. (Je ne suis pas sorti même après l'avoir vérifié un peu ...) De plus, lors de l'enregistrement avec plt.savefig (), il est nécessaire de spécifier la couleur d'arrière-plan avec facecolor = [^ 3].

Recommended Posts

Implémentez "Data Visualization Design # 2" avec matplotlib
Implémentez "Data Visualization Design # 3" avec pandas et matplotlib
Visualisation des données avec les pandas
Graphique des données Excel avec matplotlib (1)
Graphique des données Excel avec matplotlib (2)
Méthode de visualisation de données utilisant matplotlib (1)
Méthode de visualisation de données utilisant matplotlib (2)
Méthode de visualisation de données utilisant matplotlib (+ pandas) (5)
Traçage de données polyvalent avec pandas + matplotlib
Méthode de visualisation de données utilisant matplotlib (+ pandas) (3)
Visualisez facilement vos données avec Python seaborn.
Méthode de visualisation de données utilisant matplotlib (+ pandas) (4)
Analyse de données à partir de python (visualisation de données 2)
Séparation de la conception et des données dans matplotlib
Recommandation d'Altair! Visualisation des données avec Python
Animation avec matplotlib
Japonais avec matplotlib
Animation avec matplotlib
histogramme avec matplotlib
Faire une animation avec matplotlib
Visualisez les données d'infection corona à Tokyo avec matplotlib
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
Analyse de données avec python 2
Graphique 2 axes avec Matplotlib
Implémenter FReLU avec tf.keras
Lecture de données avec TensorFlow
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Carte thermique par Python + matplotlib
Apprenez avec Chemo Informatics Matplotlib
Manipulation des données avec les Pandas!
Mélangez les données avec les pandas
Différentes barres de couleurs avec Matplotlib
Normariser les données avec Scipy
Analyse de données avec Python
Visualisation de la logistique avec Python
CHARGER DES DONNÉES avec PyMysql
Ajustez les axes avec matplotlib
Premiers pas avec le dessin avec matplotlib: création de diagrammes à partir de fichiers de données
Implémentez la normalisation du prétraitement des données d'entraînement Python avec scikit-learn [fit_transform]
[Recherche causale / inférence causale] Implémentez un réseau Basian avec des données Titanic
Exemple de données créées avec python
Implémenter la fonction de connexion avec django-allauth
Incorporer des données audio avec Jupyter
Génération artificielle de données avec numpy
Implémenter des sous-commandes avec l'argparse de Python
Extraire les données Twitter avec CSV
Essayez d'utiliser matplotlib avec PyCharm
Obtenez des données Youtube avec python
Méthode de dessin graphique avec matplotlib
Apprenez de nouvelles données avec PaintsChainer
Visualisation des données par préfecture
Binariser les données photo avec OpenCV
Implémenter le GPU PyTorch + avec Docker
Utilisez Django pour enregistrer les données de tweet
Bar plot empilable avec matplotlib
[Qt Designer] Implémenter WebView avec PyQt5
Sélectionnez les couleurs en dégradé avec matplotlib
Animer plusieurs graphiques avec matplotlib
Conseils de traitement des données avec Pandas