Python-Tipps – Lösen Sie das Problem verstümmelter chinesischer Zeichen, wenn Sie Matplotlib zum Generieren von Bildern verwenden (einschließlich Windows-Systemen und Nicht-Windows-Systemen).

Erst gestern diskutierten meine Kollegen aus dem Plattformteam, die mir gegenüber saßen, mit meinen Front-End-Kollegen über die Probleme, die während des gemeinsamen Debugging-Prozesses aufgetreten waren. Die allgemeine Situation war wie folgt: Die Back-End-Kollegen mussten ein Bild des Berichts erstellen Daten und senden Sie sie dann zur Anzeige an das Frontend. , es klingt nach einer Anforderung, die nicht allzu mühsam und recht einfach ist, aber sie haben es zwei Tage lang diskutiert und es immer noch nicht gelöst. Sie haben immer gedacht, dass es so ist Möglicherweise liegt ein Problem mit der Kodierung der vom Front-End übertragenen Bilddaten vor. Sie haben versucht, die Daten zu kodieren, das Front-End zu dekodieren und es gibt immer noch Probleme mit einigen anderen Methoden. Sie haben nie herausgefunden, warum Das lokale gemeinsame Debuggen zeigt kein Problem, aber wenn es auf den Server gestellt wird, gibt es ein verstümmeltes chinesisches Problem?

Als ich es verstand, lächelte ich und sagte: „Ich bin in meiner langen Karriere als Programmierer auf dieses Problem gestoßen. Haha, schauen wir uns dieses Problem gemeinsam an.“

  • Unter Windows verwenden wir zunächst den folgenden Code, um Bilder zu generieren

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')

Die chinesischen Zeichen im roten Teil werden durch Quadrate ersetzt. Dies liegt daran, dass die mit matplotlib gelieferte Schriftartenbibliothek kein Chinesisch unterstützt. Fügen Sie hier die folgenden zwei Codezeilen hinzu, um die chinesische Systemschriftart simhei.ttf-Datei aufzurufen. Natürlich Sie können auch die gewünschte chinesische Schriftart verwenden, solange Sie sie einfach an der richtigen Position platzieren. Es gibt auch eine andere Möglichkeit, ohne Code hinzuzufügen. Sie müssen die chinesische Schriftart herunterladen > sie in den Pfad der Matplotlib-Schriftartbibliothek einfügen > die Matplotlibrc-Datei ändern . Der Effekt kann auch erzielt werden. Die erste Lösung wird unten verwendet.

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')

Die chinesische Anzeige ist normal.

  • Schauen wir uns Nicht-Windows-Systeme an. Hier wird der CentOS-Server verwendet.

Verwenden Sie den obigen Code, um auf einem Windows-System kein Problem auf Chinesisch anzuzeigen. Die Ergebnisse sind wie folgt

Chinesisch ist immer noch quadratisch und der Code enthält auch eine Warnung

Anhand der Warnung können Sie erkennen, dass das Centos-System nicht über diese chinesische Schriftart verfügt.

Lösung

1. Suchen Sie die Schriftartdatei „SimHei“ im Verzeichnis C:\Windows\Fonts von Windows. Der angezeigte Name ist der Name „Heilongjiang Regular“.

2. Kopieren Sie die obige Datei C:\Windows\Fonts\simhei.ttf in das Verzeichnis /usr/share/fonts/ des Centos-Servers.

3. Leeren Sie den Matplotlib-Cache und führen Sie den Befehl rm -rf ~/.cache/matplotlib aus.

4. Führen Sie den Code erneut aus und das Ergebnis ist wie folgt: perfekte Lösung

Natürlich können Sie auch die von Ihnen gewünschten Schriftarten verwenden. Sie können auch Schriftarten herunterladen, die Sie nicht haben. Legen Sie sie einfach in das Verzeichnis oben und schon können Sie sie verwenden.

Um es ausführlicher zu gestalten: Wenn die Anwendung in einem Container bereitgestellt wird, finden Sie hier eine kurze Einführung in die Lösung. Sie müssen die Schriftartendatei in die Projektdatei einbinden. Verwenden Sie in der Container-Image-Datei den Befehl, um die Schriftartendatei zu kopieren Fügen Sie einfach diese beiden Anweisungen im Containerverzeichnis /usr/share/fonts/ hinzu.

Das war's mit diesem Teilen. Mein Kollege hat das Problem erfolgreich gelöst. Ich hoffe, es kann allen helfen. Ich freue mich auf das nächste Mal. Bis bald.

Ich denke du magst

Origin blog.csdn.net/qq_21372359/article/details/127110565
Empfohlen
Rangfolge