matplotlib 中文亂碼怎麼解決提示詞(中文顯示方塊、負號不顯示、Linux 伺服器無字體)+ 業務圖表模板

用 matplotlib 或 seaborn 畫圖時中文變成方塊、負號顯示異常,或者在 Linux 伺服器、Docker、Jupyter 中換了環境又亂碼時用:AI 按你的系統給出可靠的字體配置方法,並附一套適合週報彙報的業務圖表模板(統一字體、配色、標註和導出設定)。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名熟悉 matplotlib 字體機制的數據分析師。請幫我解決中文顯示問題,並給我一套業務圖表模板。

- 運行環境:[運行環境](例:Windows 本地 Jupyter、macOS、Linux 伺服器、Docker 容器)
- matplotlib 版本:[matplotlib 版本]
- 現在的代碼與現象:
  [代碼與現象]
- 圖表用途:[圖表用途](例:週報 PPT 中的趨勢圖和對比圖)

第一部分:解決亂碼
1. 原因:matplotlib 預設字體不包含中文字形;不同系統可用的中文字體名稱不同。
2. 先列出當前環境中可用的中文字體(給出檢查代碼),再根據結果設定字體,並按我的系統給出常見的可用字體名稱作為候選。
3. 兩種設定方式及取捨:全局設定字體族;或者直接指定字體文件路徑(更可靠,適合伺服器和容器,也便於在項目中攜帶字體文件)。注意字體的授權,推薦可以免費商用的開源中文字體。
4. 負號顯示異常的處理。
5. 改了配置仍然無效時:字體緩存需要清除或重建、Jupyter 內核需要重啟。
6. Linux 伺服器與 Docker:安裝開源中文字體的命令,或在鏡像中複製字體文件。

第二部分:業務圖表模板
寫一個可複用的樣式設定函數和兩三個常用圖表函數(折線趨勢、分組柱形對比、橫向條形排名),要求:
- 統一字體與字號層級,標題直接寫結論;
- 配色:一個強調色加若干灰色,突出重點系列;
- 去掉多餘的邊框和網格,數據標籤只標關鍵值;
- 座標軸數字格式(千分位、百分比、萬元單位);
- 導出:適合 PPT 的尺寸與解像度,背景是否透明,儲存為 PNG 和 SVG。

代碼加中文註釋,可以直接運行。

高亮處換成你自己的內容:[運行環境]、[matplotlib 版本]、[代碼與現象]、[圖表用途]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[運行環境] 是最關鍵的資訊:Windows、macOS 和 Linux 上可用的中文字體完全不同,伺服器和 Docker 鏡像中往往一箇中文字體都沒有。代碼裏報的字體警告也一起貼上,能幫助判斷。

常見坑:

  • 網上的教學直接寫一個字體名,在你的電腦上可能根本沒有這個字體,於是設定了也沒用。先列出本機可用的字體再設定。
  • 修改配置後還是亂碼,很可能是字體緩存或者 Jupyter 內核沒有重啟。
  • 設定中文字體後負號變成了方塊,需要單獨關閉「使用 Unicode 負號」的選項。

追問技巧:追問「把這個模板改成 seaborn 也能使用的主題」,或「把一組指標批量畫成小多圖,統一座標軸範圍」。科研論文的出版級圖表可配合 313 號提示詞。

示例輸出

示例,僅供參考(節選)
python
import matplotlib.pyplot as plt
from matplotlib import font_manager

# 1. 查看當前環境可用的中文字體
zh = sorted({f.name for f in font_manager.fontManager.ttflist
             if any(k in f.name for k in ("Hei", "Song", "Noto Sans CJK", "Source Han", "PingFang", "YaHei"))})
print(zh)

# 2. 最可靠的方式:直接加載項目中攜帶的字體文件(例如開源的思源黑體)
font_path = "fonts/SourceHanSansSC-Regular.otf"
font_manager.fontManager.addfont(font_path)
plt.rcParams["font.family"] = font_manager.FontProperties(fname=font_path).get_name()
plt.rcParams["axes.unicode_minus"] = False      # 負號正常顯示

def biz_style():
    plt.rcParams.update({
        "figure.figsize": (10, 5.6), "figure.dpi": 150,
        "axes.spines.top": False, "axes.spines.right": False,
        "axes.titlesize": 16, "axes.titleweight": "bold",
    })

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~