Matplotlib 保存圖片、圖畫接口和顯示中文的使用方法


一、保存圖片

可以通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM