Matplotlib 是Python編程語(yǔ)言的一個(gè)繪圖庫(kù)及其數(shù)值數(shù)學(xué)擴(kuò)展 NumPy。它為利用通用的圖形用戶界面工具包,如Tkinter, wxPython, Qt或GTK+向應(yīng)用程序嵌入式繪圖提供了面向?qū)ο蟮膽?yīng)用程序接口。 fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) Matplotlib在 matlab中不用畫軸,就像這樣 Matlab m里面也有相似得用法, 接下來(lái)看看圖形要素 Figure 在整個(gè)figure。Figure跟蹤所有子Axes,少量“特殊”artists(標(biāo)題,人物傳說(shuō)等)和畫布。(不必太擔(dān)心畫布,這是至關(guān)重要的,因?yàn)樗鼘?shí)際上是繪制對(duì)象來(lái)獲得繪圖的對(duì)象,但作為用戶,您幾乎看不見它)。一個(gè)圖形可以包含任意數(shù)量的Axes,但通常至少包含一個(gè)。(機(jī)翻,有點(diǎn)鬼畜) 創(chuàng)建新圖形的最簡(jiǎn)單方法是使用pyplot: fig, ax = plt.subplots() # a figure with a single Axes fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes 將軸與圖形一起創(chuàng)建很方便,但是以后也可以添加軸,以實(shí)現(xiàn)更復(fù)雜的軸布局。 Axes 這就是您認(rèn)為的“繪圖”,它是具有數(shù)據(jù)空間的圖像區(qū)域。一個(gè)給定的圖形可以包含許多Axes,但是一個(gè)給定的Axes 對(duì)象只能位于一個(gè)Figure。軸包含兩個(gè)(或3D情況下為三個(gè)) Axis對(duì)象(注意軸和Axis之間的差異),這些對(duì)象負(fù)責(zé)數(shù)據(jù)限制(也可以通過(guò)axes.Axes.set_xlim()和 axes.Axes.set_ylim()方法控制數(shù)據(jù)限制)。每個(gè)Axes都有一個(gè)標(biāo)題(通過(guò)設(shè)置set_title()),一個(gè)x標(biāo)簽(通過(guò)設(shè)置set_xlabel())和一個(gè)y 標(biāo)簽(通過(guò) 設(shè)置 set_ylabel())。 的Axes類和它的成員函數(shù)是主要的入口點(diǎn)與OO接口工作。 Axis 這些是類似數(shù)字線的對(duì)象。他們負(fù)責(zé)設(shè)置圖形限制并生成刻度(軸上的標(biāo)記)和刻度標(biāo)簽(標(biāo)記刻度的字符串)??潭鹊奈恢糜蒐ocator對(duì)象確定,刻度標(biāo)簽字符串由格式化Formatter。正確Locator和正確的組合可以Formatter很好地控制刻度線的位置和標(biāo)簽。 Artist? 基本上你可以在圖中看到的一切是一個(gè)藝術(shù)家(甚至 Figure,Axes和Axis對(duì)象)。這包括 Text對(duì)象,Line2D對(duì)象,collections對(duì)象,Patch 對(duì)象...(您明白了)。繪制圖形后,所有藝術(shù)家都被繪制到畫布上。大多數(shù)藝術(shù)家都被綁在斧頭上。這樣的藝術(shù)家不能被多個(gè)軸共享,也不能從一個(gè)軸移動(dòng)到另一個(gè)軸。 使用Matplotlib本質(zhì)上有兩種方法: 顯式創(chuàng)建圖形和軸,并在其上調(diào)用方法(“面向?qū)ο螅∣O)樣式”)。 依靠pyplot自動(dòng)創(chuàng)建和管理圖形和軸,并使用pyplot函數(shù)進(jìn)行繪圖。 所以可以做到(OO風(fēng)格) 代碼不一樣,結(jié)果一樣,體現(xiàn)了,圖包在大方向上繪圖得兩種方法 對(duì)于一些經(jīng)常要繪制得圖,可以考慮函數(shù)得方法就像這樣: 一旦圖形很復(fù)雜,這種方法是個(gè)不錯(cuò)的選擇 性能 無(wú)論是以交互方式瀏覽數(shù)據(jù)還是以編程方式保存大量繪圖,渲染性能都可能成為繪圖中的一個(gè)痛苦瓶頸。Matplotlib提供了幾種方法,以稍微改變繪制外觀(達(dá)到可設(shè)置的公差)為代價(jià),大大減少了渲染時(shí)間。減少渲染時(shí)間的可用方法取決于所創(chuàng)建繪圖的類型。 線段簡(jiǎn)化 對(duì)于具有線段的圖(例如,典型的線圖,多邊形的輪廓等),可以通過(guò)文件中的path.simplify和 path.simplify_threshold參數(shù) 來(lái)控制渲染性能matplotlibrc。該path.simplify參數(shù)是一個(gè)布爾值,指示是否完全簡(jiǎn)化了線段。該 path.simplify_threshold參數(shù)控制簡(jiǎn)化的線段數(shù)量。閾值越高,渲染越快。 以下腳本將首先顯示數(shù)據(jù)而不進(jìn)行任何簡(jiǎn)化,然后以簡(jiǎn)化方式顯示相同的數(shù)據(jù)。嘗試與他們兩個(gè)進(jìn)行交互: import matplotlib.pyplot as plt import matplotlib as mpl # Setup, and create the data to plot y = np.random.rand(100000) y[50000:] *= 2 y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1 mpl.rcParams['path.simplify'] = True mpl.rcParams['path.simplify_threshold'] = 0.0 plt.plot(y) plt.show() mpl.rcParams['path.simplify_threshold'] = 1.0 plt.plot(y) plt.show() Matplotlib當(dāng)前默認(rèn)為的簡(jiǎn)化閾值 通過(guò)將線段迭代合并為單個(gè)矢量,直到下一個(gè)線段到矢量的垂直距離(在顯示坐標(biāo)空間中測(cè)量)大于該 標(biāo)記簡(jiǎn)化標(biāo)記也可以簡(jiǎn)化,盡管不如線段健壯。標(biāo)記簡(jiǎn)化僅適用于 markevery參數(shù)允許進(jìn)行簡(jiǎn)單的二次采樣,或嘗試均勻間隔(沿x軸)采樣。 將行分成較小的塊什么是后端,就是把你得code翻譯出來(lái)顯示在屏幕上面 如果使用的是Agg后端.則可以使用 以下腳本將首先顯示沒(méi)有任何塊大小限制的數(shù)據(jù),然后顯示塊大小為10,000的相同數(shù)據(jù)。當(dāng)數(shù)字很大時(shí),最好看到最大的區(qū)別,請(qǐng)嘗試最大化GUI并與之交互: import numpy as npimport matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['path.simplify_threshold'] = 1.0 # Setup, and create the data to plot y = np.random.rand(100000) y[50000:] *= 2 y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1 mpl.rcParams['path.simplify'] = True mpl.rcParams['agg.path.chunksize'] = 0 plt.plot(y) plt.show() mpl.rcParams['agg.path.chunksize'] = 10000 plt.plot(y) plt.show() 與上面得圖一樣,但是繪制時(shí)間在主觀上面確實(shí)可以感覺(jué)到了差異 傳說(shuō)軸的默認(rèn)圖例行為會(huì)嘗試查找覆蓋最少數(shù)據(jù)點(diǎn)( 使用快速樣式該快速樣式可用于自動(dòng)設(shè)置簡(jiǎn)化和拆分參數(shù)合理設(shè)置,以加快繪制大量的數(shù)據(jù)。只需運(yùn)行以下命令即可使用它: import matplotlib.style as mplstylemplstyle.use('fast') 它的重量很輕,因此可以與其他樣式很好地配合,只要確保最后應(yīng)用快速樣式即可,這樣其他樣式就不會(huì)覆蓋設(shè)置: mplstyle.use(['dark_background', 'ggplot', 'fast'])求關(guān)注,求轉(zhuǎn)發(fā) |
|