Matplotlib的基本用法


Matplotlib有兩種接口,一種是matlab風格接口,一種是面向對象接口。在這里,統一使用面向對象接口。因為面向對象接口可以適應更復雜的場景,在多圖之間進行切換將變得非常容易。

 

首先導入matplotlib:from matplotlib import pyplot as plt。plt是最常用的接口。

 

一. 創建圖像和坐標軸

fig=plt.figure()   ---   創建圖像

ax=plt.axes()   ---   創建坐標軸

在matplotlib中,可以把figure看成是一個容納各種坐標軸,圖像,文字和標簽的容器,axes是一個帶有刻度和標簽的矩形。我們通常用變量fig表示一個圖形實例,用變量ax表示一個坐標軸實例。

對於層級概念的詳細介紹,可查看:https://www.jianshu.com/p/78ba36dddad8以及https://www.cnblogs.com/kallan/p/7365472.html

另外,也可以通過fig,ax=plt.subplots()命令一次性建立圖像和坐標軸。

 

二. 設置繪圖風格

plt.style.use('classic')   ---   選擇經典風格

使用此命令后,其他圖像繪制也都會使用這種風格。

matplotlib.rcdefaults命令恢復默認設置。

可以用plt.style.available命令查看所有可用的風格。

* 如果只需要臨時更換至另一種風格,則用with plt.style.context('stylename'):

 

三. 顯示圖像

plt.show()

因為一個python session只能使用一次plt.show(),因此通常把此命令放在腳本的最后。

 

四. 保存圖像

fig.savefig('figure_name.png')   ---   在工作文件夾中存入一個figure_name.png文件

注意:此命令必須放在plt.show()之前,否則保存的將會是空白圖像。

可以通過fig.canvas.get_supported_filetypes()查看系統支持的文件格式。

 

五. 調整坐標軸上下限

ax.set_xlim(min,max)   ---   設置x軸上下限

ax.set_ylim(min,max)   ---   設置y軸上下限

 

六. 設置圖像標題

ax.set_title("title_name")   ---   設置名為title_name的標題

 

七. 設置坐標軸標簽

 ax.set_xlabel("label_name")   ---   設置x軸標簽

 ax.set_ylabel("label_name")   ---   設置y軸標簽

 

八. 設置圖例

 ax.legend([line1,line2,line3],["label1","label2","label3"],loc='upper left')   ---   給三條線分別設置圖例,位置在左上角

 

九. 一次性設置坐標軸上下限,坐標軸標簽和標題

ax.set(xlim=(min,max), ylim=(min,max), xlabel="label_name", ylabel="label_name", title="title_name")

 

十. 設置顏色條

fig.colorbar(label="label_name")   ---   此處的label為顏色條的標簽

 

十一. 添加文字

ax.text(x,y,s)   ---   在(x,y)坐標處添加文字(s)

 

十二. 添加注釋

ax.annotate("annotation",xy=(1,2),xycoords='axes fraction',xytext=(2,3),textcoords='axes fraction',arrowprops=dict(arrowstyle="->"))   ---   (x,y)坐標處為箭頭的位置,xycoords為箭頭的坐標體系,xytext為注釋文字起始的坐標,textcoords為注釋文字的坐標體系,arrowstyle為箭頭樣式

 

十三. 隱藏邊框

一開始在想怎么去除y軸,在網上查了半天都是把坐標軸刻度去掉的那種(也就是第十四條那種),最后發現原來我要去除的是邊框。。。

ax.spines["top"].set_visible(False)   ---   隱藏上邊框

ax.spines["bottom"].set_visible(False)   ---   隱藏下邊框

ax.spines["left"].set_visible(False)   ---   隱藏左邊框

ax.spines["right"].set_visible(False)   ---   隱藏右邊框

 

十四. 隱藏坐標軸(刻度和刻度值)

ax.set_xticks([ ])   ---   隱藏x軸刻度和刻度值

ax.set_yticks([ ])   ---   隱藏y軸刻度和刻度值

 *如果只需隱藏刻度值,同時保留刻度的話,使用ax.xaxis.set_major_formatter(plt.NullFormatter())命令和ax.yaxis.set_major_formatter(plt.NullFormatter())命令。

 

十五. 設置坐標軸刻度和刻度標簽

ax.set_xticks([1,2,3])   ---   設置x軸刻度為1,2,3

ax.set_yticks([1,2,3])   ---   設置y軸刻度為1,2,3

ax.set_xticklabels(["one","two","three"])   ---   設置x軸刻度標簽為one,two,three

ax.set_yticklabels(["one","two","three"])   ---   設置y軸刻度標簽為one,two,three

 

十六. 創建多個圖像

大圖里放小圖(inset):ax1=fig.add_axes([left, bottom, width, height])   --- [left, bottom, width, height]用來設置新坐標軸的位置和大小

規則網格圖(regular grid of plots):fig,ax=plt.subplots(num_of_rows,num_of_columns,sharex=True,sharey=True)   ---   創建幾行幾列的網格圖后,可以用ax[0].plot(),ax[1].plot()等等相繼在各網格上畫圖

不規則網格圖(irregular grid of plots):grid=plt.GridSpec(2,3); ax1=fig.add_subplot(grid[0,1:])   ---   先設置一個二行三列的網格,再在此網格上的第一行,第二到第三列添加坐標軸,可繼續添加,以此類推

fig.subplots_adjust(hspace=0.4,wspace=0.6)調整子圖間的距離。

 

十七. 設置顯示中文和負號

a. 下載字體:msyh.ttf (微軟雅黑),放在matplotlib的字體文件夾內:Lib\site-packages\matplotlib\mpl-data\fonts\ttf

b. 進入Python安裝目錄下的Lib\site-packages\matplotlib\mpl-data目錄,打開matplotlibrc文件,在font.sans-serif后添加微軟雅黑字體(Microsoft YaHei),修改axes.unicode_minus為False

c. 刪除.matplotlib/cache里面的兩個緩存字體文件

d. 重啟Python

c. 在腳本里寫上該命令:matplotlib.rcParams['font.sans-serif']='Microsoft Yahei'或在需要顯示中文的地方加上參數:fontproperties='Microsoft Yahei'

 

以上只是Matplotlib的一些基本用法,如需使用更深入的用法或設置更多參數,請查看官網。

 

下面列出一些用matplotlib畫的基本圖形。

 

一. 畫柱形圖/條形圖

ax.bar()和ax.barh()

例子:Matplotlib學習---用matplotlib畫柱形圖,堆積柱形圖,橫向柱形圖(barchart)

 

二. 畫散點圖/氣泡圖

ax.plot()和ax.scatter()

例子:Matplotlib學習---用matplotlib畫散點圖,氣泡圖(scatterplot, bubble chart)

 

三. 畫折線圖

ax.plot()

例子:Matplotlib學習---用matplotlib畫折線圖(line chart)

 

四. 畫直方圖/密度圖

ax.hist()

例子:Matplotlib學習---用matplotlib畫直方圖/密度圖(histogram, density plot)

 

五. 畫餅圖/面包圈圖

ax.pie()

例子:Matplotlib學習---用matplotlib畫餅圖/面包圈圖(pie chart, donut chart)

 

另外,發現有一個比較好的介紹matplotlib基本功能的網站:http://www.labri.fr/perso/nrougier/teaching/matplotlib/


免責聲明!

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



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