網站首頁 編程語言 正文
前言
Matplotlib 默認不支持中文字體,這因為 Matplotlib 只支持 ASCII 字符,但中文標注更加符合中國人的閱讀習慣。因此,本節重點講解如何在 Windows 環境下讓 Matplotlib 顯示中文。
Matplotlib中文亂碼
當不對 Matplotlib 進行設置,而直接使用中文時,繪制的圖像會出現中文亂碼。下面是一個含有中文亂碼的折線圖:
從上圖可以看出,本應該顯示在紅框內的中文字體沒有顯示出來(紅框是自己標注出來的),下面給出了兩種解決方案:第一種是臨時解決方案,第二種是一勞永逸的解決方案。
重寫配置文件
通過臨時重寫配置文件的方法,可以解決 Matplotlib 顯示中文亂碼的問題,代碼如下所示:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #設置字體
plt.rcParams["axes.unicode_minus"]=False #該語句解決圖像中的“-”負號的亂碼問題
將上述代碼添加到您的繪圖程序中,即可解決中文亂碼的問題。這是一種非常靈活、便捷的解決方法。完整的程序代碼如下:
#繪制折線圖
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #設置字體
plt.rcParams["axes.unicode_minus"]=False #正常顯示負號
year = [2017, 2018, 2019, 2020]
people = [20, 40, 60, 70]
#生成圖表
plt.plot(year, people)
plt.xlabel('年份')
plt.ylabel('人口')
plt.title('人口增長')
#設置縱坐標刻度
plt.yticks([0, 20, 40, 60, 80])
#設置填充選項:參數分別對應橫坐標,縱坐標,縱坐標填充起始值,填充顏色
plt.fill_between(year, people, 20, color = 'green')
#顯示圖表
plt.show()
輸出結果如下:
不過上述解決方案適用于所有操作系統,其唯一弊端是每編寫一個繪圖程序就要添加一次相同的代碼。
修改配置文件
下面介紹第二種方式:通過直接修改配置文件的方法,可以一勞永逸的解決 Matplotlib 的中文亂碼問題。注意此過程在 Windows 環境下進行。
Matplotlib 從配置文件 matplotlibrc 中讀取相關配置信息,比如字體、樣式等,因此我們需要對該配置文件進行更改。首先查看 matplotlibrc 所在的目錄,使用如下代碼確定目錄位置:
import matplotlib
matplotlib.matplotlib_fname()
輸出結果:
D:\python\python37\lib\site-packages\matplotlib\mpl-data\matplotlibrc
然后修改配置文件 matplotlibrc。打開配置文件后,找到以下信息:
#font.family: sans-serif
#font.serif: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
將上述配置項前面的#去掉,并修改的配置項,如下所示:
font.family : Microsoft YaHei, sans-serif
font.serif: Microsoft YaHei, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
注意,由于版本問題,上述內容配置信息可能存在一些差異,請自動忽略。
最后,在以下目錄中復制中文字體微軟雅黑:
C:\Windows\Fonts\Microsoft YaHei UI
復制完成后,將字體粘貼至以下路徑文件中:
D:\python\python37\lib\site-packages\matplotlib\mpl-data\fonts\ttf
字體粘貼后會出現一個 MSYH.ttc 的字體文件,如下所示:
編寫如下代碼進行測試:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-8, 8, 1024)
y1 = 0.618 * np.abs(x) - 0.8 * np.sqrt(64 - x ** 2)
y2 = 0.618 * np.abs(x) + 0.8 * np.sqrt(64 - x ** 2)
plt.plot(x, y1, color='r')
plt.plot(x, y2, color='r')
plt.title("測試",fontsize=20,color="b")
plt.show()
如果你對自己編寫的程序沒有強烈的“潔癖”,可以接受重復的代碼,那么建議您選擇第一種解決方法,因為這種方法靈活、輕便。當然您也可以選擇第二種方式,一勞永逸的解決中文亂碼問題。
總結
原文鏈接:https://blog.csdn.net/ccc369639963/article/details/123003687
相關推薦
- 2022-07-14 python利用線程生成不同尺寸的縮略圖實例詳解_python
- 2022-11-12 python中validators庫的使用方法詳解_python
- 2022-11-17 Go語言學習教程之指針的示例詳解_Golang
- 2022-03-27 c++模擬實現string類詳情_C 語言
- 2021-12-07 Android使用acoco統計代碼行覆蓋率介紹_Android
- 2022-10-14 TimeDateUtils日期時間工具類
- 2023-02-05 Python實現前向和反向自動微分的示例代碼_python
- 2022-02-27 一個多模塊的Spring Boot項目打成多個jar包在服務器上運行
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支