Matplotlib chinesische Darstellung

Matplotlib ist für die chinesische Anzeige nicht besonders benutzerfreundlich. Um Chinesisch in Matplotlib anzuzeigen, können wir zwei Methoden verwenden:

  • Legen Sie die Schriftartparameter von Matplotlib fest.
  • Laden Sie eine Schriftartenbibliothek herunter, die Chinesisch unterstützt, und verwenden Sie diese.

Ohne Festlegung einer Schriftart ist die Standardanzeige wie folgt, und der chinesische Teil kann nicht normal angezeigt werden:


Matplotlib-Schriftartparameter

Wir können zuerst die Liste der Schriftartenbibliotheken des Systems abrufen:

Beispiel

from matplotlib import pyplot as plt
import matplotlib
a=sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

for i in a:
    print(i)

Das Ausgabeergebnis ist ähnlich wie das folgende:

...
Heiti TC
Helvetica
Helvetica Neue
Herculanum
Hiragino Maru Gothic Pro
Hiragino Mincho ProN
Hiragino Sans
Hiragino Sans GB
Hoefler Text
...

Der obige Code gibt alle registrierten Namen in der ttflist von font_manager aus. Suchen Sie eine chinesische Schriftart wie STFangsong (FangSong) oder Heiti TC (Heiti) und fügen Sie dann den folgenden Code hinzu.

Für Windows:

plt.rcParams['font.family'] = 'SimHei'  # 替换为你选择的字体

Wählen Sie unter Windows SimHei (Heiti) oder eine andere chinesische Schriftart aus und legen Sie sie als Standardschriftart für Matplotlib fest.

Für Linux:

plt.rcParams['font.family'] = 'WenQuanYi Micro Hei'  # 替换为你选择的字体

Verwenden Sie unter Linux den Befehl fc-list, um installierte Schriftarten anzuzeigen, wählen Sie eine chinesische Schriftart aus und legen Sie sie als Standardschriftart für Matplotlib fest.

Für macOS:

plt.rcParams['font.family'] = 'Heiti TC'  # 替换为你选择的字体

Durch Festlegen vonplt.rcParams['font.family']weisen Sie Matplotlib an, die ausgewählte Schriftart zum Rendern von Text zu verwenden, wodurch Chinesisch im Diagramm korrekt dargestellt wird.

Auf diese Weise können Sie die vom System unterstützten chinesischen Schriftarten in Matplotlib-Diagrammen verwenden.

Beispiel

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'Heiti TC'  # Durch die von Ihnen gewählte Schriftart ersetzen

# Daten erstellen
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# Liniendiagramm zeichnen
plt.plot(x, y)

# Titel und Beschriftungen hinzufügen
plt.title('Liniendiagramm-Beispiel')
plt.xlabel('X-Achse')
plt.ylabel('Y-Achse')

# Zeige das Diagramm an
plt.show()

Dann kann Chinesisch normal angezeigt werden, wie unten gezeigt:

Universelle Methode für verschiedene Plattformsysteme:

# -------------------------- 设置中文字体 start --------------------------
plt.rcParams['font.sans-serif'] = [
    # Windows 优先
    'SimHei', 'Microsoft YaHei',
    # macOS 优先
    'PingFang SC', 'Heiti TC',
    # Linux 优先
    'WenQuanYi Micro Hei', 'DejaVu Sans'
]
# 修复负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
# -------------------------- 设置中文字体 end --------------------------

Beispiel

import numpy as np
import matplotlib.pyplot as plt

# -------------------------- Chinesische Schriftart festlegen Start --------------------------
plt.rcParams['font.sans-serif'] = [
    # Windows zuerst
    'SimHei', 'Microsoft YaHei',
    # macOS zuerst
    'PingFang SC', 'Heiti TC',
    # Linux zuerst
    'WenQuanYi Micro Hei', 'DejaVu Sans'
]
# Behebe das Problem, dass das Minuszeichen als Quadrat angezeigt wird
plt.rcParams['axes.unicode_minus'] = False
# -------------------------- Chinesische Schriftart festlegen Ende --------------------------

# Simulierte Daten generieren: etwas zufälliges Rauschen auf die Sinuskurve addieren
np.random.seed(42)
X = np.linspace(0, 10, 20)
y_true = np.sin(X)                     # Das wahre zugrunde liegende Muster (das wir nicht kennen)
y_noise = np.random.randn(20) * 0.3   # Zufälliges Rauschen
y = y_true + y_noise                  # Die Daten, die wir tatsächlich beobachten

plt.scatter(X, y, label='Beobachtete Daten (mit Rauschen)', color='blue', alpha=0.6)
plt.plot(X, y_true, label='Wahres Muster (y=sin(x))', color='green', linewidth=2)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Daten und zugrunde liegendes Muster')
plt.legend()
plt.grid(True)
plt.show()

Unser Ziel ist es, eine Kurve (ein Modell) zu finden, die das Muster am besten beschreibt, das sich in diesen blauen Streupunkten (Daten) widerspiegelt.

Das Ausmaß, in dem das Modell die Daten beschreibt, wird alsAnpassung bezeichnet。


Verwenden einer Schriftbibliothek

Matplotlib unterstützt standardmäßig kein Chinesisch. Wir können die folgende einfache Methode verwenden, um dies zu lösen.

Hier verwenden wir Source Han Sans, eine von Adobe und Google herausgebrachte Open-Source-Schriftart.

Offizielle Website:https://source.typekit.com/source-han-serif/cn/

GitHub-Adresse:https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese

Nach dem Öffnen des Links wählen Sie einfach eine darin aus:

Sie können auch von der Cloud-Festplatte herunterladen:https://pan.baidu.com/s/10-w1JbXZSnx3Tm6uGpPGOw, Extraktionscode:yxqu。

Sie können eine OTF-Schriftart wie SourceHanSansSC-Bold.otf herunterladen und die Datei im selben Verzeichnis wie die aktuell ausgeführte Codedatei ablegen:

Legen Sie die Datei SourceHanSansSC-Bold.otf im selben Verzeichnis wie die aktuell ausgeführte Codedatei ab:

Beispiel

import numpy as np from matplotlib import pyplot as plt import matplotlib # fname ist der Pfad zur heruntergeladenen Schriftbibliothek; beachten Sie den Pfad der Schriftart SourceHanSansSC-Bold.otf zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf") x = np.arange(1,11) y = 2 * x + 5 plt.title("Beispiel-Tutorial - Test", fontproperties=zhfont1) # fontproperties legt die chinesische Anzeige fest, fontsize legt die Schriftgröße fest plt.xlabel("x-Achse", fontproperties=zhfont1) plt.ylabel("y-Achse", fontproperties=zhfont1) plt.plot(x,y) plt.show()

Die Ausgabe nach der Ausführung ist wie unten gezeigt:

Weitere Erweiterungen