matplotlib 中文亂碼怎麼解決提示詞(中文顯示方塊、負號不顯示、Linux 伺服器無字體)+ 業務圖表模板
用 matplotlib 或 seaborn 畫圖時中文變成方塊、負號顯示異常,或者在 Linux 伺服器、Docker、Jupyter 中換了環境又亂碼時用: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",
})同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~