Conseils Python - Résolvez le problème des caractères chinois tronqués lors de l'utilisation de matplotlib pour générer des images (y compris les systèmes Windows et les systèmes non Windows)

Hier encore, mes collègues de l'équipe plateforme assis en face de moi discutaient confusément avec mes collègues front-end des problèmes rencontrés lors du processus de débogage commun. La situation générale était la suivante : les collègues back-end avaient besoin de générer une image de la rapporter les données puis les envoyer au front-end pour les afficher. , cela ressemble à une exigence qui n'est pas trop gênante et assez simple, mais ils en discutent depuis 2 jours et ne l'ont toujours pas résolu. Ils ont toujours pensé que il peut s'agir d'un problème avec le codage des données d'image transmises par le front-end et le front-end. Ils ont essayé de coder les données, de décoder le front-end, et il y a encore des problèmes avec d'autres méthodes. Ils n'ont jamais pu pour comprendre pourquoi le débogage commun local ne montre aucun problème, mais lorsqu'il est mis sur le serveur, il y a un problème de chinois tronqué ?

Quand je l'ai compris, j'ai souri et j'ai dit : j'ai rencontré ce problème au cours de ma longue carrière de codeur, haha, examinons ce problème ensemble.

  • Tout d'abord, sous Windows, nous utilisons le code suivant pour générer des images

import matplotlib.pyplot as plt fig = plt.figure(figsize=(5, 5))  # 定义图并设置画板尺寸fig.set(alpha=0.2)ax1 = fig.add_subplot(111)plt.title('测试图')plt.xlabel('x标签')plt.ylabel('y标签')plt.savefig('test.png')

Les caractères chinois dans la partie rouge sont remplacés par des carrés. En effet, la bibliothèque de polices fournie avec matplotlib ne prend pas en charge le chinois. Ici, ajoutez les deux lignes de code suivantes pour appeler la police chinoise du système simhei.ttf. Bien sûr, vous pouvez également utiliser la police chinoise de votre choix, à condition de la mettre simplement dans la bonne position. Il existe un autre moyen sans ajouter de code. Vous devez télécharger la police chinoise > la mettre dans le chemin de la bibliothèque de polices matplotlib > modifier le fichier matplotlibrc L'effet peut également être obtenu.La première solution est utilisée ci-dessous.

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体plt.rcParams["axes.unicode_minus"] = False  # 该语句解决图像中的“-”负号的乱码问题fig = plt.figure(figsize=(5, 5))  # 定义图并设置画板尺寸fig.set(alpha=0.2)ax1 = fig.add_subplot(111)plt.title('测试图')plt.xlabel('x标签')plt.ylabel('y标签')plt.savefig('test.png')

L'affichage chinois est normal.

  • Regardons les systèmes non Windows. Le serveur CentOS est utilisé ici.

Utilisez le code ci-dessus pour afficher aucun problème en chinois sur le système Windows, les résultats sont les suivants

Le chinois est toujours en carrés et le code contient également un avertissement

Vous pouvez savoir grâce à l'avertissement que le système centos n'a pas cette police chinoise.

Solution

1. Recherchez le fichier de police "SimHei" dans le répertoire C:\Windows\Fonts de Windows. Le nom affiché est le nom de "Heilongjiang Regular".

2. Copiez le fichier C:\Windows\Fonts\simhei.ttf ci-dessus dans le répertoire /usr/share/fonts/ du serveur centos.

3. Videz le cache matplotlib et exécutez la commande rm -rf ~/.cache/matplotlib.

4. Exécutez à nouveau le code et le résultat est le suivant, solution parfaite

Bien sûr, vous pouvez également utiliser les polices de votre choix. Vous pouvez également télécharger des polices que vous n'avez pas, placez-les simplement dans le répertoire ci-dessus et vous pourrez les utiliser.

Pour être plus détaillé, si l'application est déployée dans un conteneur, voici une brève introduction à la solution. Vous devez inclure le fichier de police dans le fichier projet. Dans le fichier image du conteneur, utilisez la commande pour copier le fichier de police dans le répertoire du conteneur /usr/share/fonts/. , ajoutez simplement ces deux instructions.

Voilà pour ce partage. Mon collègue a réussi à résoudre le problème. J'espère que cela pourra aider tout le monde. J'ai hâte de vous revoir la prochaine fois. A bientôt.

Je suppose que tu aimes

Origine blog.csdn.net/qq_21372359/article/details/127110565
conseillé
Classement