一、保存圖片
可以通過savefig()方法,將繪制的圖形保存為文件:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,100) fig = plt.figure() plt.plot(x,np.sin(x),'-') plt.plot(x,np.cos(x),'--') fig.savefig('fig.png')
可以通過下面的方法查看系統支持的圖片格式:
fig.canvas.get_supported_filetypes()
savefig方法有一些可定制的參數,比如你想得到一個600dpi的圖片,並且盡量少的空白:
plt.savefig('image.jpg', dpi=600,bbox_inches='tight')
下面是savefig方法的參數說明:
- fname:文件路徑或文件對象,根據擴展名推斷文件格式
- dpi:分辨率,默認100
- format: 指定文件格式
- bbox_inches: 要保存的圖片范圍。‘tight’表示去掉周邊空白。
- facecolor:子圖之外的背景顏色,默認白色
- edgecolor:邊界顏色
二、圖像接口
Matplotlib有兩種畫圖接口:一是便捷的MATLAB風格接口,一個是功能更強大的面向對象接口。
-
MATLAB接口
MATLAB風格的工具位於pyplot接口中,比如:
x = np.linspace(0,10,100) # 生成點列表
plt.figure() # 創建圖形
plt.subplot(2,1,1) # 行、列、子圖編號
plt.plot(x,np.sin(x)) plt.subplot(2,1,2) plt.plot(x,np.cos(x)) # 第二個子圖
這種接口最重要的特性是有狀態的,它會持續跟蹤當前的圖形和坐標軸,所有plt命令都可以使用。可以使用plt.gcf()方法獲取當前圖形和plt.gca()獲取當前坐標軸的具體信息。
但是這種接口也有問題。比如,當創建第二個子圖的時候,怎么才能回到第一個子圖,並增加新內容呢?雖然也能實現,但方法比較復雜。而下面的方式則不存在這個問題。
-
面向對象的接口
這種方式可以適應更加復雜的場景,更好地控制你的圖形。畫圖函數不再受到當前‘活動’圖形或者坐標軸的限制,而變成了顯式的Figure和Axes的方法。下面是個例子:
fig, ax = plt.subplots(2) # ax是包含兩個Axes對象的數組
ax[0].plot(x,np.sin(x)) # 在每個對象上調用plot()方法
ax[1].plot(x,np.cos(x))
三、顯示中文
在默認情況下,如果使用中文,會顯示為方框亂碼,解決這個問題只要在代碼的起始處進行如下設置:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
以上方法是只能臨時使用,每次都要執行。如果想一勞永逸,那么必須修改配置文件。
import matplotlib as mpl mpl.matplotlib_fname()
用文本編輯器打開上面代碼運行后的文件,找到下面這行:
#font.serif : DejaVu Serif, Bitstream Vera Serif,...
將前面的注釋符號去掉。
然后去C:\Windows\Fonts\Microsoft
中復制一個你想要的字體ttf文件,或者別處的字體文件,將它粘貼到..\mpl-data\fonts\ttf
文件夾中,並給它重命名為Vera.ttf
。
還有一個坐標軸的負號正常顯示的配置修改:
#去掉注釋符號,同時,改為False
axes.unicode_minus : False