# Matplotlib 中文標籤問題
> 作者:王一哲
> 日期:2020/3/2
這篇只能算是按照網路上找到的方法,在自己的電腦上測試的筆記,主要參考以下兩篇文章:
1. [解决Python使用matplotlib绘图时出现的中文乱码问题](https://blog.csdn.net/qq_40563761/article/details/102989770)
2. [PYTHON 如何在Win 10解決matplotlib中文顯示的問題?](https://daxpowerbi.com/%E5%A6%82%E4%BD%95%E5%9C%A8win-10%E8%A7%A3%E6%B1%BAmatplotlib%E4%B8%AD%E6%96%87%E9%A1%AF%E7%A4%BA%E7%9A%84%E5%95%8F%E9%A1%8C/)
## Windows 10
如果電腦裡有安裝**中易宋體** (SimSun) 或是 **中易黑體** (SimHei),可以按照第一篇文章的作法,直接在程式碼裡設定
```python
plt.rcParams['font.sans-serif']=['SimSun']
plt.rcParams['axes.unicode_minus']=False
```
或是
```python
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
```
但如果沒有安裝對應的字體,則要按照第二篇文章的作法,先安裝思源宋體,這是[下載字體的連結](https://www.google.com/get/noto/#sans-hant)。再到下列的檔案裡找到對應的字體名稱
```shell
C:\Users\[使用者名稱]\.matplotlib\fontlist-v310.json
```
例如我使用的是 **NotoSansCJKtc** 系列的字體,名稱是 **Noto Sans CJK TC**。以下是我試著使用中文標籤的程式碼,測試的環境為 Windows 10 家用版、Python 3.7.5、matplotlib 3.1.1。
```python=
import numpy as np # 引入科學計算函式庫
import matplotlib.pyplot as plt # 引入繪圖函式庫
plt.rcParams['font.sans-serif']=['Noto Sans CJK TC'] # 將字體設定為思源宋體
plt.rcParams['axes.unicode_minus']=False # 用來正常顯示負號
xmin, xmax, num = 0, 4*np.pi, 100 # 設定繪圖範圍、取點數
x = np.linspace(xmin, xmax, num) # 產生x, sin, cos, tan
sin = np.sin(x)
cos = np.cos(x)
tan = np.tan(x)
plt.figure(figsize=(6, 4.5), dpi=100) # 設定圖片尺寸
plt.title('三角函數圖形', fontsize=16) # 設定圖片標題
plt.xlabel(r'$\theta~\mathrm{(rad)}$', fontsize=14) # 設定坐標軸標籤
plt.ylabel('三角函數值', fontsize=14)
plt.xticks(fontsize=12) # 設定坐標軸數字格式
plt.yticks(fontsize=12)
plt.grid(color='gray', linestyle='--', linewidth=1) # 設定格線顏色、種類、寬度
plt.ylim(-2, 2) # 設定y軸繪圖範圍
# 繪圖並設定線條顏色、寬度、圖例
line1, = plt.plot(x, sin, color='red', linewidth=3, label='正弦 sin')
line2, = plt.plot(x, cos, color='green', linewidth=3, label='餘弦 cos')
line3, = plt.plot(x, tan, color='blue', linewidth=3, label='正切 tan')
plt.legend(handles = [line1, line2, line3], loc='upper right')
plt.savefig('TrigonometricFunction.svg') # 儲存圖片
plt.savefig('TrigonometricFunction.png')
plt.show() # 顯示圖片
```
<br />
<img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/NRSv4lk.png">
<div style="text-align:center">於 Windows 10 測試結果</div>
<br />
## Linux
測試的環境為 Lubuntu 19.10、Python 3.7.5、matplotlib 3.1.3。方法同上,先將下載回來的字體複製到以下的資料夾中
```shell
/home/[使用者名稱]/.local/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
```
再移除以下的檔案
```shell
/home/[使用者名稱]/.cache/matplotlib/fontlist-v310.json
```
如果擔心會出問題,可以先複製一份,如果失敗了再將檔案蓋回去就好。開啟 Python IDLE,執行前面的程式碼,可以畫出同樣的圖形,測試成功。
<img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/aE8MF9H.png">
<div style="text-align:center">於 Lubuntu 19.10 測試結果</div>
<br />
---
###### tags:`Python`