[PYTHON] Comment éliminer les caractères déformés dans l'image de sortie matplotlib

Vous pouvez dessiner des graphiques qui peuvent être dessinés dans Excel avec python.

Un package appelé matplotlib fournit cette fonction.

La signification du dessin est-elle ce qui peut être dessiné dans Excel dans le langage de script principalement pour l'automatisation?

Il peut être utilisé pour des applications telles que l'acquisition périodique de données mises à jour quotidiennement, leur représentation graphique et l'automatisation de l'envoi de l'image par e-mail.

Voici, à titre d'exemple, [Données nationales sur la transition des frais de scolarité des universités privées publiées par le ministère de l'Éducation, de la Culture, des Sports, des Sciences et de la Technologie](http://www.mext.go.jp/b_menu/shingi/kokuritu/005/gijiroku/06052921/005/ 002.htm) est utilisé.

Enregistrez-le en tant que fichier data.csv comme indiqué ci-dessous. (Il a été correctement formaté, par exemple en remplaçant les blancs par vim)

année,Frais de scolarité (yens),Frais d'admission (yens),Frais d'examen (yens),Frais de scolarité (yens),Frais d'admission (yens),Frais d'examen (yens),Frais de scolarité (double),Frais d'admission (double),Frais d'examen (double)
1975,36000,50000,5000,182677,95584,9647,5.1,1.9,1.9
1976,96000,50000,7500,221844,121888,11452,2.3,2.4,1.5
1977,96000,60000,7500,248066,135205,13084,2.6,2.3,1.7
1978,144000,60000,10000,286568,157019,14722,2,2.6,1.5
...

La partie des données réelles de chaque frais de scolarité nationaux et privés est lue par python, répertoriée, ajustée comme le paramètre d'étiquette et le paramètre d'affichage des précédents, et enfin écrite dans graph.png.

from matplotlib import pyplot

with open("data.csv", "r", encoding="shift-jis") as fp:
    x, xlabels = [], []
    y1, y2 = [], []
    for linenum, line in enumerate(fp):
        if linenum is 0:
            continue
        x.append(linenum)
        xlabels.append(line.split(",")[0])
        y1.append(line.split(",")[1])
        y2.append(line.split(",")[4])

#paramètre d'étiquette de l'axe x
pyplot.xticks(x, xlabels, rotation=90)
#Espace d'affichage des étiquettes de l'axe X étendu
pyplot.subplots_adjust(bottom=0.2)

#Dessiner avec du cyan uni
pyplot.plot(x, y1, 'c-', label="Université nationale")
#Dessiner avec une ligne continue de magenda
pyplot.plot(x, y2, 'm-', label="Université privée")

# grid, title,Affichage de la légende
pyplot.title("Modifications des frais de scolarité, etc. dans les universités nationales et privées")
pyplot.legend()
pyplot.grid()

#pyplot.show()
pyplot.savefig("graph.png ")

Le résultat est illustré dans la figure ci-dessous.

Le soi-disant tofu ... C'est parce que matplotlib n'a pas de polices japonaises.

Ce sont des informations un peu anciennes et python2, mais [Comment définir Helvetica comme police sans-serif par défaut dans Matplotlib](http://blog.olgabotvinnik.com/blog/2012/11/15/2012-11-15- How-to-set-helvetica-as-the-default-sans-serif-font-in /) explique comment ajouter une police. [^ 1]

Vous pouvez extraire une police qui prend en charge le japonais du système, mais je n'ai pas trouvé la police ttf sur mon Mac, donc police IPA /download.html#en).

Décompressez le fichier zip téléchargé et copiez-le comme suit. Veuillez noter que la destination de la copie dépend de l'environnement.

$ cp ~/Downloads/IPAfont00303/*.ttf /usr/local/lib/python3.4/site-packages/matplotlib/mpl-data/fonts/ttf/

Copiez le fichier de configuration sous Accueil et modifiez-le.

$ cp /usr/local/lib/python3.4/site-packages/matplotlib/mpl-data/matplotlibrc ~/.matplotlib/
$ vi ~/.matplotlib/matplotlibrc

Définissez le nom de la police dans font.family.

Veuillez noter que vous ne spécifiez pas le nom du fichier de police ici.

ʻOpen ipa.ttf`, vérifiez le nom de la police que vous souhaitez utiliser, puis définissez-le.

matplotlibrc


# The font.size property is the default font size for text, given in pts.
# 12pt is the standard value.
#
font.family         : IPAmincho

Supprimez les données mises en cache.

$ rm ~/.matplotlib/fontList.py3k.cache

Maintenant, la prochaine fois que vous ferez ʻimport matplotlib`, les données du cache seront automatiquement générées et vous pourrez les afficher en japonais.

Si vous réexécutez le script python, vous pouvez voir que le tofu a été éliminé comme indiqué ci-dessous.

[^ 1]: la police standard matplotlib n'est pas belle! Et en colère

Recommended Posts

Comment éliminer les caractères déformés dans l'image de sortie matplotlib
Élimination des caractères japonais brouillés de matplotlib et NetworkX de la bibliothèque Python
Comment supprimer l'erreur d'affichage dans matplotlib
Comment régler le contraste de l'image en Python
Éliminez les caractères japonais brouillés dans les graphiques matplotlib avec Cloud Pak for Data Notebook
Comment gérer les caractères déformés dans json de Django REST Framework
Comment utiliser la bibliothèque d'images Python dans la série python3
Comment effacer les caractères générés par Python
[Python] Comment dessiner un histogramme avec Matplotlib
Comment générer "Ketsumaimo" en standard en Python
Comment utiliser Matplotlib
Comment appliquer des marqueurs uniquement à des données spécifiques avec matplotlib
Comment créer un téléchargeur d'image avec Bottle (Python)
Comment ajouter une barre de couleur dans le graphique à barres de matplotlib
Comment passer le paramètre backend de matplotlib avec une variable d'environnement
[Python] Comment afficher les valeurs de liste dans l'ordre
Comment développer en Python
Éliminez les caractères japonais brouillés dans les données JSON acquises par l'API.
seaborn, matplotlib Élimination des caractères brouillés dans Windows10, environnement virtuel Anaconda
Comment sortir un document au format pdf avec Sphinx
Comment définir la résolution de sortie pour chaque image clé dans Blender
[Python] Comment faire PCA avec Python
Comment gérer une session dans SQLAlchemy
Comment utiliser les classes dans Theano
Comment écrire sobrement avec des pandas
Comment collecter des images en Python
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print
Comment mettre à jour Spyder dans Anaconda
Comment utiliser SQLite en Python
Résolvez les caractères japonais brouillés dans matplotlib de Jupyter Notebook sur Docker
Comment exécuter matplotlib sur heroku
Comment convertir 0,5 en 1056964608 en un seul coup
Comment refléter CSS dans Django
Comment tuer des processus en vrac
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment écrire une image de base Docker
Comment écraser la sortie sur la console
Deux façons d'afficher plusieurs graphiques dans une seule image avec matplotlib
Comment exécuter du code TensorFlow 1.0 en 2.0
Comment gérer le japonais avec Python
Comment se connecter à Docker + NGINX
Comment appeler PyTorch dans Julia
[Petite histoire] Comment enregistrer des graphiques matplotlib dans un lot avec Jupyter
Comment envoyer une image visualisée des données créées en Python à Typetalk
[Introduction à Python] Comment utiliser la classe en Python?
Comment titrer plusieurs figures avec matplotlib
Comment définir dynamiquement des variables en Python
Sortir les caractères de couleur en joli avec python
Comment convertir csv en tsv dans la CLI
Comment supprimer des sessions expirées dans Django
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser Google Test en langage C
Comment implémenter un sérialiseur imbriqué avec drf-flex-fields
Comment utiliser BigQuery en Python
Comment exécuter des commandes avec Jupyter Notebook
Comment faire 'git fetch --tags' dans GitPython