學視頻地址:https://www.ixigua.com/7296027092624343591
參考:https://blog.csdn.net/CSDN__SMART/article/details/129967190
1、在Windows環境下下載相應字體
用SimHei字體為例,現在下面的網址中下載該字體到本地電腦
http://www.1473.cn/Pages/Download.htm?id=22dd72df-3b5b-fcf5-089f-5bbaa6f0b601
2、確定字體文件路徑
可以在python編譯器中輸入下面兩行代碼即可找到該文件的位置
import matplotlib
matplotlib.matplotlib_fname()
輸出見下圖
從輸出可以看出我的參考路徑為
/home/usestudio/modules/anaconda3/envs/nodejs/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
3、在X-shell(或者其他Linux服務器遠程終端)中上傳matplotlibrc文件,
如下圖,通過X-ftp(Windows與Linux服務器傳輸文件的工具)傳輸到Linux服務器相應目錄中。
/root/miniconda3/envs/rapids-23.02/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf
這是放置文件的位置mpl-data/fonts/ttf
4、在X-shell中輸入下面一行命令
vi /home/usestudio/modules/anaconda3/envs/nodejs/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
就會出現一個下面的界面,我截取了一部分
然后找到下圖紅色方框圈住的位置
先將三個紅色方框圈住部分的注釋去掉,然后在font.serif和font.sans-serif的冒號后面添加上下載的字體名字,注意一定要看清名字大小寫,最好復制粘貼過來 ,編輯參考見下圖。
然后找到axes.unicode_minus開頭的一行,將其注釋去掉,且將其后面的True更改為False即可,具體如下圖。
然后按鍵esc進入文件命令模式,輸入:wq,即可保存文件并退出。
5、清除matplotlibrc緩存文件
在X-shell中輸入下面兩行命令
cd ~/.cache
rm -rf matplotlib
清除掉在修改matplotlibrc配置文件之前的緩存文件。
6、重新打開JupyterHub
進入JupyterHub編程界面jupter.1473.cn
單擊重啟內核按鈕
然后再重新運行畫圖的python代碼,中文就可以識別啦?。?!附上效果圖
也可以利用輸入python代碼的形式確認字體有沒有被成功導入到Jupyter Lab中,在python編譯器中輸入
from matplotlib import font_manager
a=sorted([f.name for f in font_manager.fontManager.ttflist])
for i in a:
print(i)
在輸出中如果看到simhei字體即成功導入,也就可以識別啦!
為了更好地理解所有基礎繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎API使用
需求:畫出某城市11點到12點1小時內每分鐘的溫度變化折線圖,溫度范圍在15度~18度
效果:
import matplotlib.pyplot as plt
import random
# 畫出溫度變化圖
# 0.準備x, y坐標的數據
x=range(60)
y_shanghai=[random.uniform(15, 18) for i in x]
# 1.創建畫布
plt.figure(figsize=(20, 8), dpi=80)
# 2.繪制折線圖
plt.plot(x, y_shanghai)
# 3.顯示圖像
plt.show()
# 增加以下兩行代碼
# 構造x軸刻度標簽
x_ticks_label=["11點{}分".format(i) for i in x]
# 構造y軸刻度
y_ticks=range(40)
# 修改x,y軸坐標的刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
如果沒有解決過中文問題的話,會顯示這個樣子:
解決方案一:
下載中文字體(黑體,看準系統版本)
解決方案二:
在Python腳本中動態設置matplotlibrc,這樣也可以避免由于更改配置文件而造成的麻煩,具體代碼如下:
from pylab import mpl
# 設置顯示中文字體
mpl.rcParams["font.sans-serif"]=["SimHei"]
有時候,字體更改后,會導致坐標軸中的部分字符無法正常顯示,此時需要更改axes.unicode_minus參數:
# 設置正常顯示符號
mpl.rcParams["axes.unicode_minus"]=False
為了更加清楚地觀察圖形對應的值
plt.grid(True, linestyle='--', alpha=0.5)
添加x軸、y軸描述信息及標題
通過fontsize參數可以修改圖像中字體的大小
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點0分到12點之間的溫度變化圖示", fontsize=20)
# 保存圖片到指定路徑
plt.savefig("test.png")
完整代碼:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 設置顯示中文字體
mpl.rcParams["font.sans-serif"]=["SimHei"]
# 設置正常顯示符號
mpl.rcParams["axes.unicode_minus"]=False
# 0.準備數據
x=range(60)
y_shanghai=[random.uniform(15, 18) for i in x]
# 1.創建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制圖像
plt.plot(x, y_shanghai)
# 2.1 添加x,y軸刻度
# 構造x,y軸刻度標簽
x_ticks_label=["11點{}分".format(i) for i in x]
y_ticks=range(40)
# 刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加網格顯示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
# 2.4 圖像保存
plt.savefig("./test.png")
# 3.圖像顯示
plt.show()
需求:再添加一個城市的溫度變化
收集到北京當天溫度變化情況,溫度在1度到3度。怎么去添加另一個在同一坐標系當中的不同圖形,其實很簡單只需要再次plot即可,但是需要區分線條,如下顯示
# 增加北京的溫度數據
y_beijing=[random.uniform(1, 3) for i in x]
# 繪制折線圖
plt.plot(x, y_shanghai)
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--')
我們仔細觀察,用到了兩個新的地方,一個是對于不同的折線展示效果,一個是添加圖例。
# 繪制折線圖
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
# 顯示圖例
plt.legend(loc="best")
完整代碼:
# 0.準備數據
x=range(60)
y_shanghai=[random.uniform(15, 18) for i in x]
y_beijing=[random.uniform(1,3) for i in x]
# 1.創建畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪制圖像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y軸刻度
# 構造x,y軸刻度標簽
x_ticks_label=["11點{}分".format(i) for i in x]
y_ticks=range(40)
# 刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加網格顯示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
# 2.4 圖像保存
plt.savefig("./test.png")
# 2.5 添加圖例
plt.legend(loc=0)
# 3.圖像顯示
plt.show()
如果我們想要將上海和北京的天氣圖顯示在同一個圖的不同坐標系當中,效果如下:
可以通過subplots函數實現(舊的版本中有subplot,使用起來不方便),推薦subplots函數
# 0.準備數據
x=range(60)
y_shanghai=[random.uniform(15, 18) for i in x]
y_beijing=[random.uniform(1, 5) for i in x]
# 1.創建畫布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes=plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.繪制圖像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y軸刻度
# 構造x,y軸刻度標簽
x_ticks_label=["11點{}分".format(i) for i in x]
y_ticks=range(40)
# 刻度顯示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
# 2.2 添加網格顯示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
# plt.xlabel("時間")
# plt.ylabel("溫度")
# plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[0].set_xlabel("時間")
axes[0].set_ylabel("溫度")
axes[0].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[1].set_xlabel("時間")
axes[1].set_ylabel("溫度")
axes[1].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
# # 2.4 圖像保存
plt.savefig("./test.png")
# # 2.5 添加圖例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3.圖像顯示
plt.show()
代碼: