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/。