1.簡介
Matplotlib 是一個 Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形。
?
2.繪圖基礎
2.1 圖表基本元素
- 圖例和標題
- x軸和y軸、刻度、刻度標簽
- 繪圖區域及邊框
- 網格線
2.2 圖表基本屬性
- 多重繪圖屬性: 是否在同一個圖上繪制多個系列的線
- 多重子圖屬性: 是否生成多個子圖,并在每個子圖上繪制多個系列的線
?
3.繪圖方式
3.1 Pyplot API[1]
matplotlib畫圖,3.1.1 屬性設置函數
- 繪制圖邊框: box
- 為圖表添加圖例: figlegend
- 為軸系列添加圖例:legend
- 為圖添加標題:title
- 在圖上添加文字: figtext
- 在軸系列上添加文字:text
- 設置網格: grid
- 設置多重繪圖:hold
- 使用緊密布局:tight_layout
- 改變刻度和刻度標簽的樣式:tick_params / ticklabel_format
- 設置最小刻度:minorticks_off / minorticks_on
- 在多個子圖上方繪制超級標題:suptitle
- 為圖表添加數據表:table
- 共享x軸或y軸:twinx / twiny
- 設置x/y標簽:xlabel / ylabel
- 設置x/y極限:xlim / ylim
- 設置x/y刻度:xticks / yticks
3.1.2 屬性獲取函數
- 獲取系列軸:gca
- 獲取圖表:gcf
- 獲取圖表標簽:get_figlabels
- 獲取圖表數目:get_fignums
3.1.3 輔助線函數
- 水平豎直線:axhline / axvline
- 水平豎直域:axhspan / axvspan
- 誤差棒:errorbar
- 豎直線:vlines
3.1.4 繪圖函數
- 條形圖:bar / barh?/ broken_barh
- 箱線圖:boxplot
- 六邊形圖:hexbin
- 直方圖:hist / hist2d
- 矩陣圖:matshow
- 餅狀圖:pie
- 顏色棒圖:colorbar
- 極坐標圖:polar
- 散點圖:scatter
- 樹干圖:stem
- 階梯圖:step
- 對數圖:loglog / semilogx /? semilogy
- 小提琴圖:violinplot
- 重新繪制:draw
- 生成一個新的圖:figure
- 生成子圖:subplot / subplots
- 填充區域: fill / fill_between / fill_betweenx
- 在軸系列上繪制線或者標記:plot
- 繪制時間數據:plot_date
- 顯示圖表:show
pythonmatplotlib。3.1.5 清除函數
- 清除特定系列的軸對象: cla
- 從當前圖中清除特定系列的軸對象:delaxes
- 清除當前圖:clf
- 關閉圖窗口:close?
- 保存圖表:savefig
3.2 Object-Oriented API[2]
Axes類
將pyplot API封裝成對象的成員函數,建議使用這些成員函數,更加利于理解繪圖過程
?
4.Example
import re import numpy as np import matplotlib.pyplot as pltdef extract_time(filename):handle = open(filename)handle.readline()handle.readline()handle.readline()line = handle.readline()all_time = []while line:cqe_time_stamp_tuple = re.findall(r'\d+', line)all_time.append(int(cqe_time_stamp_tuple[-1]))line = handle.readline()all_time.sort()return all_time
def heterogeneous_plot(h_time, i_time):pct_axis = 1. * np.arange(len(h_time)) / (len(h_time) - 1)
#繪制第一條線并設置圖例plt.plot(h_time, pct_axis, label="with_bg_flow")
#繪制第二條線并設置圖例plt.plot(i_time, pct_axis, label="without_bg_flow")
#設置圖例顯示屬性plt.legend(loc='center right', fontsize='large')
#設置圖表標題plt.title("CDF of Small Flow")
#設置x/y軸標題plt.xlabel("Latency(us)")plt.ylabel("CDF(%)")plt.show()if __name__ == "__main__":h_time_data = extract_time("1_tmp_data/100000_OUTPUT")i_time_data = extract_time("2_tmp_data/100000_OUTPUT")heterogeneous_plot(h_time_data, i_time_data)individual_plot(h_time_data, i_time_data)
matplotlib可以交互嗎?
?
?
5.參考資料:
[1] matplot.pyplot api documents[https://matplotlib.org/api/pyplot_summary.html]
Matplotlib、[2] matplot.axes[https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes]