matplotlib学习笔记.CookBook
matplotlib 是Python下的一個(gè)高質(zhì)量的畫圖庫,可以簡單的類似于MATLAB方法構(gòu)建高質(zhì)量的圖表。
原始文章地址:http://zanyongli.i.sohu.com/blog/view/195717824.htm
學(xué)習(xí)心得:
筆記參照《用Python做科學(xué)計(jì)算》的matplotlib部分。
凡例:a. [float]表示對(duì)象類型是float,用時(shí)不用加'['和']'。b. 代碼中的跳格表示換行。
Chap 5 matplotlib-繪制精美的圖表
1. artist對(duì)象的set_*方法和plt.setp()函數(shù):line.set_antialiased(False),plt.setp(lines,color='r'),其中antialiased指反鋸齒效果。
2. plt.getp()只能對(duì)一個(gè)對(duì)象進(jìn)行操作:指定屬性名,返回對(duì)象的指定屬性的值;以及不指定屬性名,顯示出對(duì)象的所有屬性和其值。
3. Figure對(duì)象和Axes對(duì)象的關(guān)系,以前蒙出來過,但是這個(gè)說得更明白:“Figure對(duì)象有一個(gè)axes屬性,其值為AxesSubplot對(duì)象的列表,每個(gè)AxesSubplot對(duì)象代表圖表中的一個(gè)子圖,前面所繪制的圖表只包含一個(gè)子圖,當(dāng)前子圖也可以通過plt.gca獲得”。
4. Axes的背景顏色可通過axisbg這個(gè)關(guān)鍵字參數(shù)指定,同樣是單字母的,不確定是否能有全稱。奇怪的是用的是axis這個(gè)詞而非axes,不過坐標(biāo)軸是不能有什么“背景”顏色的,所以估計(jì)也無妨了。
5. 繪制面積不一樣的subplot,例子:plt.subplot(221) plt.subplot(222) plt.subplot(212),就是開始跟電腦說要按2*2的格子畫這種格式下的第一張圖,即左上角那張(先上后下先左右后),然后是右上角那張,然后耍賴說第二行咱按2*1的格子畫這種格式下的第二張。可年的電腦!
6. 多張subplot軸情況下,調(diào)節(jié)之間的間距和軸與邊框之間的距離用subplots_adjust函數(shù),通過指定left, right, bottom, top, wspace, hspace等幾個(gè)關(guān)鍵字參數(shù)進(jìn)行調(diào)節(jié),坐標(biāo)均遵照坐標(biāo)軸體系。
7. 查看用戶定義的rc文件路徑:matplotlib.get_configdir()。當(dāng)前使用的rc文件的路徑:matplotlib.matplotlib_fname()。
8. rc文件實(shí)際上是定義了一個(gè)字典,因此讀取的配置文件返回的是一個(gè)配置字典,顯示rc參數(shù)的的命令是:matplotlib.rc_params()。
9. 修改rc參數(shù)可以直接逐項(xiàng)修改字典中的鍵值,也可以使用rc函數(shù),比如:matplotlib.rc("lines", marker="x", linewidth=2, color="red") 。
10. 恢復(fù)默認(rèn)rc設(shè)置:matplotlib.rcdefaults()。重載rc文件(比如手動(dòng)修改rc文件之后):matplotlib.rcParams.update(matplotlib.rc_params())。
11. Text對(duì)象的_text屬性即是指定或默認(rèn)分配的字符字符串,比如:ax.xaxis.label._text,其中xlabel如果被我們指定為'time',則返回'time'。也可以類方法來返回這個(gè)屬性的值:ax.xaxis.label.get_text()。
12. Artist對(duì)象的共有屬性。以前嫌逐個(gè)翻譯和驗(yàn)證官方文檔上的麻煩,不過不知道有什么關(guān)鍵字參數(shù)還真抓瞎,不如順便抄錄下來:alpha,不透明度,值在0到1之間;animated,是否開啟動(dòng)畫效果;axes,當(dāng)前這個(gè)對(duì)象所在的Axes對(duì)象,無或不適用則為None;clip_box,對(duì)象的裁剪框;clip_on,是否裁剪;clip_path,裁剪的路徑;contains,判斷指定點(diǎn)是否在對(duì)象上的函數(shù);figure,所在的Figure對(duì)象,可能為None;label,文本標(biāo)簽;picker,控制Artist對(duì)象選取;transform,坐標(biāo)體系;visible,是否可見;zorder,控制繪圖順序。
13. 一次設(shè)置多個(gè)Artist對(duì)象屬性:fig.set(alpha=0.5, zorder=2)。逐個(gè)則類同1,set_*就好,比如:fig.set_alpha(0.5*fig.get_alpha())。
14. 為了支持pylab中的gca()等函數(shù),Figure對(duì)象內(nèi)部保存有當(dāng)前Axes的信息,因此不建議直接對(duì)Figure.axes屬性進(jìn)行列表操作,而代之以add_subplot, add_axes, add_patch, delaxes等類方法的使用,來進(jìn)行添加和刪除操作。當(dāng)然利用列表的特性有時(shí)也是有好處的,比如可以對(duì)Axes中的對(duì)象進(jìn)行迭代操作。
15. plot返回的是一個(gè)Line2D對(duì)象的列表,因?yàn)槲覀兛梢詡鬟f多組X,Y軸的數(shù)據(jù),一次繪制多條曲線,所以賦值的時(shí)候經(jīng)常可見:line, = ax.plot(x, y, "-", color="blue", linewidth=2),不然line就會(huì)是一個(gè)列表,而非Line2D對(duì)象。原來如此。
16. 這個(gè)……也太智能了吧?(Python shell下)>>> rects <a list of 50 Patch objects>。
17. [Axes].hist()返回三個(gè)對(duì)象,分別是樣本空間,bin數(shù)目,和由此創(chuàng)建的Axes中的Rectangle對(duì)象組成的列表。
18. [Collections].get_size():返回Collections對(duì)象的PolygonCollection的數(shù)目,用于散點(diǎn)圖。
19. 現(xiàn)在開始說Axis對(duì)象。副刻度的對(duì)象缺省為matplotlib.ticker.NullLocator,不產(chǎn)生任何刻度線;而計(jì)算主刻度的對(duì)象為matplotlib.ticker.AutoLocator,根據(jù)當(dāng)前的縮放等配置自動(dòng)計(jì)算刻度的位置。
20. 還有很多預(yù)定義的Locator對(duì)象,比如MultipleLocator ,以指定值的整數(shù)倍為刻度放置刻度線。用法:MultipleLocator(np.pi/4)。
21. 另一個(gè)預(yù)定義的Locator,FuncFormatter,使用指定的函數(shù)計(jì)算刻度文本,他會(huì)傳遞給所指定的函數(shù)兩個(gè)參數(shù):刻度值和刻度序號(hào),程序中通過比較笨的辦法計(jì)算出刻度值所對(duì)應(yīng)的刻度文本。用法:FuncFormatter(pi_formatter),其中pi_formatter是一個(gè)自定義的函數(shù)。
至此看完,感覺對(duì)matplotlib的理解又加深了一點(diǎn)。下一步準(zhǔn)備看幾個(gè)官網(wǎng)上提供的recipe,然后開始整理實(shí)驗(yàn)數(shù)據(jù),順便練習(xí)用matplotlib作圖。
????? 這次學(xué)習(xí)matplotlib也是根據(jù)的matplotlib Release 0.99.1.1。除了Python略知一二其他編程語言我這個(gè)小白一概不曉,因此不妨采用巨細(xì)無遺的筆記方式,雖然可能因?yàn)榱_嗦耽誤功夫,不過為了學(xué)得比較扎實(shí),也值了。筆記方法是大致按文中出現(xiàn)的順序,提取并記錄大意。
凡例:a. [float]表示對(duì)象類型是float,用時(shí)不用加'['和']'。b. 代碼中的跳格表示換行。
Chap 1 Introduction
1. matplotlib編寫的緣起是想在Python環(huán)境下模仿MATLAB命令風(fēng)格。matplotlib應(yīng)該都是小寫的,因?yàn)樘幵诰涫讜r(shí)都用的是小寫的m。
2. matplotlib的設(shè)計(jì)理念:簡單。跟Python的相符。
3. 對(duì)三維作圖作者推薦VTK。
4. 作者認(rèn)為任何有自尊的Python編程者對(duì)于困難的態(tài)度:挽起袖子大干一場(chǎng)。
5. matplotlib代碼可分為三個(gè)部分:pylab界面(matplotlib.pylab),給用戶提供一套命令;前端/API,把命令轉(zhuǎn)化為結(jié)果;后端,根據(jù)不同目的輸出結(jié)果。
6. 作者推薦使用iPython作為matplotlib的Python交互解釋器,據(jù)作者說是交互界面MATLAB風(fēng)格的。目前我發(fā)現(xiàn)的好處是不用導(dǎo)入 matplotlib模塊,可以直接使用各命令,不用加前綴。
Chap 3 Pyplot tutorial
7. 好習(xí)慣:import matplotlib.pylab as plt。認(rèn)識(shí)到不便之處之前就如此沿用吧。
8. plt.ylabel([string])設(shè)置y軸文字。
9. plt.show()顯示圖。
10. plt([array1],[array2],[string],linewidth=[float]),依次代表x值,y值,數(shù)據(jù)點(diǎn)的樣式。只有一個(gè) array則默認(rèn)為y值,x值為range(len(y)),點(diǎn)的樣式為'colorshape',默認(rèn)為'b-'(藍(lán)色實(shí)線),還比如'ro'(紅色圓點(diǎn)),'k^'(黑色三角),'g--'(綠色虛線),默認(rèn)都是填充的。可以串聯(lián)參數(shù)一張圖上作多條線。
11. plt.axis([array]),array內(nèi)數(shù)字依次代表xmin, xmax, ymin, ymax。
12. import numpy as np——也不錯(cuò),沿用之。np.arange()跟range()差不多,不過參數(shù)可以用小數(shù),返回的也是一個(gè)array啦。
13. 設(shè)置線條屬性。a. 參見9;b. plt.plot()返回matplotlib.lines.line2D實(shí)例,可使用相應(yīng)的類方法;c. plot.setp(plt.plot()返回結(jié)果,color=[string],linewidth=[float])
14. line2D類的屬性。可輸入plt.setp(類實(shí)例)顯示。
15. 作subplot。plt.subplot([integer][integer][integer]),依次代表行數(shù),列數(shù)和數(shù)據(jù)點(diǎn)數(shù)(沒搞明白具體是什么的行數(shù))。
16. plt.axe([array]),array里數(shù)字依次代表左限,下限,寬度,長度。
17. plt.figure([integer]),生成figure。
18. plt.gca()返回當(dāng)前軸(matplotlib.axes.Axes類實(shí)例),plt.gca()返回當(dāng)前圖(matplotlib.figure.Figure類實(shí)例)。
19. plt.title([string])設(shè)置標(biāo)題。
20. plt.text(60, .025, r'$/mu=100,/ /sigma=15$')。前面兩個(gè)是位置坐標(biāo),后面的是所顯示的文字。r表示是raw string,轉(zhuǎn)義符等等都需要特殊對(duì)待。用'$'包圍的字串里相應(yīng)字符顯示為希臘字母。
21. matplotlib支持TeX語法,自帶公式生成引擎。(沒用,R和TeX分別排在要學(xué)的語言的單子的下兩位……)
22. 對(duì)于文字(title,label,text)也可以賦值后用setp調(diào)整設(shè)置。(可能的問題是顏色是不是禁止縮寫如'r'而只能用全稱如'red'?)
23. hist()的facecolor是什么?
24. plt.grid([bool]),應(yīng)該是顯示網(wǎng)格。
25. 圖上進(jìn)一步顯示注釋:plt.annotate([string],[tuple1],[tuple2],arrowprops=[dict]),分別代表注釋文字,注釋位置目標(biāo)點(diǎn)坐標(biāo),注釋文字坐標(biāo),連接目標(biāo)點(diǎn)和文字的箭頭的屬性。
26. plt.ylim([integer],[integer]):設(shè)置y軸上下限?
Chap 5 Customizing matplotlib
27. 配置matplotlib。利用matplotlibrc,里面的參數(shù)稱為rc參數(shù)或者rc設(shè)置。
28. matplotlibrc文件位置:pwd, .matplotlib/matplotlibrc, (linux下)/usr/lib/python2.5/site-packages/matplotlib/mpl-data /matplotlibrc。
29. 查看當(dāng)前起作用的rc文件:matplotlib.matplotlib_fname()。
30. 動(dòng)態(tài)修改rc參數(shù)。import matplotlib as mpl(沿用!),mpl.rcParams包含rc參數(shù),組織形式類似dict。
31. 一次修改一組參數(shù):mpl.rc('lines', linewidth=2, color='r')。
32. mpl.rcdefaults(),恢復(fù)默認(rèn)值。
33. rc文件包含的參數(shù)類型:backend,線條(line),數(shù)據(jù)點(diǎn)樣式(patch),字體(font),文字(test),坐標(biāo)軸(axes),刻度(tick),網(wǎng)格(grid),圖例(legend),圖(figure),圖像(image)等等。
34. 實(shí)在需要修改再深入吧,先用默認(rèn)的設(shè)這把作圖搞定再說。
Chap 7 Working with text
35. 字體屬性:大小,粗細(xì),文字位置和顏色等等,默認(rèn)設(shè)置都在rc文件里。
36. 基本文字命令:text(), xlabel(), ylabel(), title(), figtext(), suptitle(), annotate()。均創(chuàng)建并返回一個(gè)matplotlib.text.Text類實(shí)例。
37. text()用法:text(x, y, [string], fontdict=None, **kwargs),在坐標(biāo)為x, y處添加string中的文本。fontdict是一個(gè)用于設(shè)置字體屬性的dict。
38. xlable()用法:xlabel([string], *args, **kwargs)。設(shè)置x軸標(biāo)簽。默認(rèn)覆蓋設(shè)置(覆蓋指函數(shù)里的參數(shù)覆蓋rc參數(shù)——兩層覆蓋有必要么?)= {'fontsize' : 'small','verticalalignment' : 'top','horizontalalignment' : 'center'}
39. title()用法:title([string], *args, **kwargs)。設(shè)置當(dāng)前軸的標(biāo)題(嘛意思?),一定是在圖所形成的框之上而非其中的。默認(rèn)覆蓋設(shè)置= {'fontsize': 'medium','verticalalignment': 'bottom','horizontalalignment': 'center'}
40. figtext()用法:figtext(x, y, [string], fontdict=None, **kwargs)。類似text(),x,y為相對(duì)值。
41. suptitle()用法:suptitle(*args, **kwargs)。在圖上加標(biāo)題。kwargs是matplotlib.text.Text類屬性,默認(rèn)值為x = 0.5, y = 0.98,均為相對(duì)值horizontalalignment = ‘center’, verticalalignment = ‘top’。
42. annotate()用法:annotate([string], xy, xytext=None, xycoords='data',
textcoords='data', arrowprops=None, **kwargs)。在坐標(biāo)為xytext處添加坐標(biāo)為x, y的點(diǎn)的注釋。arrowprops為字典。
43. 樣例代碼中其他的命令:fig是plt.figure()返回的一個(gè)類實(shí)例。fig.add_subplot(),添加subplot;fig.subplots_adjust(top=0.85),調(diào)整subplot在figure中的位置;ax.set_title('axes title'),ax是fig.add_subplot()返回的一個(gè)類實(shí)例(不知道是哪類),設(shè)置 title;ax.set_xlabel('xlabel'),設(shè)置xlabel;ax.text(3, 8, 'boxed italics text in data coords', style='italic',
bbox={'facecolor':'red', 'alpha':0.5, 'pad':10}),italic屬于style而非weight,bbox應(yīng)該是(矩形的)文本框?qū)傩?#xff0c;alpha是相對(duì)不透明度,facecolor應(yīng)該是背景顏色,pad懶得查了……;ax.text(2, 6, r'an equation: $E=mc^2$', fontsize=15),介紹TeX公式用法,參見entry 20;ax.text(3, 2, unicode('unicode: Institut f/374r Festk/366rperphysik', 'latin-1')),介紹unicode用法,前面的[string]是文本,后面是編碼方式;
ax.text(0.95, 0.01, 'colored text in axes coords',verticalalignment='bottom',horizontalalignment='right',transform=ax.transAxes), 介紹transform用法,把0.95和0.01當(dāng)成相對(duì)坐標(biāo)值;ax.annotate('annotate', xy=(2, 1), xytext=(3, 4),arrowprops=dict(facecolor='black', shrink=0.05)),介紹annotate()用法,arrowprops中的shrink似乎比較重要,指arrow起點(diǎn)不變,終點(diǎn)從坐標(biāo)為 x, y的點(diǎn)回縮xy和xytext的距離的shrink倍。
44. fig.add_axes([0,0,1,1])添加坐標(biāo)軸。
45. matplotlib.text.Text類的屬性,如rotation屬性('vertical'或者45);multialignment控制多行的對(duì)齊方式(沒太明白)。
46. 簡單的TeX語法。字符串前加r,特殊轉(zhuǎn)換前后加$(英文叫dollar sign),需要轉(zhuǎn)化的前加轉(zhuǎn)義符,$里的字符串必須是數(shù)學(xué)表達(dá)式,不然不予轉(zhuǎn)義。
47. 表示上下標(biāo)的語法。如r'$/alpha_i > /beta_i$'中,上標(biāo)用'_'連接;如下標(biāo)用'^'連接,如r'$/sum_{i=0}^ /infty x_i$'(/infty是無窮大)。分?jǐn)?shù):r'$/frac{3}{4}$',3是分子。分?jǐn)?shù)里可以套分?jǐn)?shù):r'$/frac{5 - /frac{1}{x}}{4}$',表達(dá)式是(5-1/x)/4。根號(hào):r'$/sqrt[3]{x}$',3表示3次方根。一些華麗麗的字體,默認(rèn)值由rc參數(shù)中的mathtext.default指定:r'$s(t) = /mathcal{A}/mathrm{sin}(2 /omega t)$',mathcal和mathrm分別指定了字體,cal是書法體,rm是roman體,it是斜體,tt是等寬體。還有一些注音符 (accent)和常用字符比如希臘字母的轉(zhuǎn)義名。
48. plt.savefig([string]),保存圖,名為[string]。
49. 更多annotate設(shè)置。ax.annotate('local max', xy=(3, 1),xycoords='data',xytext=(0.8, 0.95), textcoords='axes fraction',arrowprops=dict(facecolor='black',shrink=0.05))。xycoords為目標(biāo)點(diǎn)的坐標(biāo)系統(tǒng),默認(rèn)為按照data,也可以是'axes fraction',指按照坐標(biāo)軸相對(duì)位置。
50. arrowprops的屬性:shrink, facecolor, width(箭頭寬度),headwidth(箭頭寬度),frac(箭頭部分的相對(duì)長度)。
51. ax = fig.add_subplot(111, polar=True)。polar:是否使用極坐標(biāo)。
Chap 8 Image tutorial
52. 圖像處理模塊:import matplotlib.image as mpimg(沿用~)。
53. 讀取圖像:img=mpimg.imread('stinkbug.png')(關(guān)于對(duì)stinkbug的認(rèn)識(shí)還挺cross-cultural 的:p)。返回一個(gè)array,dtype為float32。matplotlib可以處理float32和uint8,非PNG格式的僅限于 uint8。對(duì)于RGB和RGBA圖像支持float32和uint8,對(duì)于灰度格式的圖像只支持 float32。
54. 用imshow命令render圖像。img = plt.imshow(img),img是53中賦值的那個(gè)對(duì)象。
55. 使用假顏色。假顏色主要用于增強(qiáng)對(duì)比,僅用于單channel圖像如灰度圖。可以用array slicing賦值,如lum_img = img[:,:,0],之后imshow來render圖像。
56. 更改假顏色設(shè)置。默認(rèn)colormap為jet,可用set_cmap()更改:imgplot.set_cmap('hot'),還可以改成spectral。
57. 設(shè)置顏色所代表的數(shù)值,稱為color bar,可用plt.colorbar()生成。
58. 利用分布信息調(diào)整圖像對(duì)比度,暫時(shí)用不著,過。
暫時(shí)先到此為止吧,以上是兩天的進(jìn)度。目前打算還看章:9, 10, 12, 13和14,還有sciPy官網(wǎng)的cookbook。估計(jì)看完這個(gè)還是不太會(huì)寫,所以最好借助cookbook熟悉作圖的套路。
Chap 9 Artist tutorial
59. matplotlib的API從低到高可以分成三個(gè)層次:a. matplotlib.backend_bases.FigureCanvas,即畫布,各種圖形所在之處;b. matplotlib.backend_bases.Renderer,即renderer,在畫布上render圖像對(duì)象的接口,c. matplotlib.artist.Artist,renderer用來在畫布上畫圖的接口。
60. Artist API可以分成兩類:primitive(暫翻作“基本類”)和container(暫翻作“容器類”)。基本類是圖像上常用的組件,比如Line2D, Rectangle, Text, AxesImage之類的,容器類是這些對(duì)象所在之處,比如Axis, Axes and Figure。一般的做法是先創(chuàng)建一個(gè)Figure類實(shí)例,然后利用類的方法創(chuàng)建Axes或者Subplot類實(shí)例,然后利用Axes類方法創(chuàng)建基本類對(duì)象。
61. Axes類是最常用的matplotlib API,因?yàn)樗亲畛S玫腸ontainer,包含很多方法,比如plot(), text(), hist(), imshow(),可以創(chuàng)建大部分primitives,比如Line2D, Text, Rectangle, Image等等(分別對(duì)應(yīng)前面的四種方法)。Axes指的是各種坐標(biāo)軸圍起來的區(qū)域,Axis指坐標(biāo)軸本身。
62. Subplot是Axes的子類——真相大白。:)
63. 創(chuàng)建Axes:fig2.add_axes([0.15, 0.1, 0.7, 0.3])。四個(gè)數(shù)字分別為左、底、寬、高,坐標(biāo)為相對(duì)值。
64. 設(shè)置坐標(biāo)軸標(biāo)簽:xtext = ax.set_xlabel('my xdata')。
65. Axes類包括XAxis和YAxis類實(shí)例,可以搞定大部分刻度、刻度標(biāo)簽和坐標(biāo)軸標(biāo)簽等坐標(biāo)軸屬性。
66. Figure和Axes都可以看成有一個(gè)外框,負(fù)責(zé)調(diào)整某些屬性,分別是Figure.patch and Axes.patch類實(shí)例。
67. 屬性的獲取和設(shè)置:object.get_屬性(),object.set_屬性(屬性值)。據(jù)說Pythonistas對(duì)這個(gè)做法不滿意(Pythonista是什么人?),正在修改中。
68. 列舉屬性:matplotlib.artist.getp([object])(或者pylab中的getp([object]))。
69. 頂層的容器類:matplotlib.figure.Figure,背景是Figure.patch類實(shí)例的Rectangle對(duì)象。添加Subplot和Axes的時(shí)候都添加到Figure.Axes里。
70. 刪除坐標(biāo)軸:delaxes()。
71. Figure的默認(rèn)坐標(biāo)系統(tǒng)使用像素作為單位,可以用fig.transFigure改成相對(duì)坐標(biāo)系統(tǒng)。
72. Figure.lines是一個(gè)列表,元素是圖中的線條。
73. fig.lines.extend([l1, l2]),把創(chuàng)建好的兩條line2D類實(shí)例l1和l2添加到圖中。
74. fig.canvas.draw()。這個(gè)沒明白。用plt.show()不就行了么?
75. plot()傳輸array之類的對(duì)象, 并創(chuàng)建matplotlib.lines.Line2D()類實(shí)例,類似地,bar()創(chuàng)建矩形并添加到Axes.patches這個(gè)列表里。也可以用add_line()和add_patch()方法創(chuàng)建。
76. 一些對(duì)科研作圖比較有用的方法(原文叫helper method,不知有沒有什么深意。):ax.annotate,創(chuàng)建Annotate基本類,容器是ax.texts;ax.bar,創(chuàng)建Rectangle基本類,容器是ax.patches;ax.errorbar,創(chuàng)建Line2D和Rectangle基本類,容器是ax.lines和ax.patches;ax.fill,創(chuàng)建Polygon基本類,容器是ax.patches,這個(gè)應(yīng)該是填充屬性;ax.hist,創(chuàng)建Rectangle基本類,容器是ax.patches,不錯(cuò),可以直接畫直方圖;ax.legend,創(chuàng)建Legend基本類,容器是ax.legends;ax.plot,創(chuàng)建Line2D基本類,容器是ax.lines;ax.scatter,創(chuàng)建PolygonCollection基本類,容器是ax.collections,應(yīng)該指散點(diǎn)圖,把所有點(diǎn)作為一個(gè)整體處理。
77. Axes可容納的各種Artist:artists(一個(gè)所有primitive和container的列表),patch(注意是單數(shù),應(yīng)該單指Axes的那個(gè)框), collections, images, legends, lines, patches, texts, xaxis, yaxis。
78. Axis類的一些方法:axis.get_ticklocs(),顯示刻度坐標(biāo);axis.get_ticklabels(),返回刻度標(biāo)簽對(duì)象(Text類實(shí)例)組成的列表;axis.get_ticklines(),返回刻度線對(duì)象(line2D類實(shí)例)組成的列表,注意刻度線默認(rèn)在上下方軸上都有;axis.get_ticklines(minor=True),副刻度線。get_scale,顯示刻度scale屬性,比如linear或者log;get_major_locator,get_major_formattor,不知道是干嘛用的,都是類實(shí)例,可能用于設(shè)置屬性;get_major_ticks,返回Tick類實(shí)例組成的列表;grid,網(wǎng)格線開關(guān);get_gridlines,返回網(wǎng)格線組成的列表。
79. lightgoldenrodyellow和lightslategray:好糾結(jié)的顏色呀
80. label.set_rotation(45),設(shè)置旋轉(zhuǎn)度數(shù)。
81. line.set_markersize(25), line.set_markeredgewidth(3)里markersize大概指的刻度線的長度,markeredgewidth指刻度線寬度。
82. Tick類屬性:tick1line(Line2D類實(shí)例,下/左軸刻度線),tick2line(Line2D類實(shí)例,上/右軸刻度線),gridline(Line2D類實(shí)例,網(wǎng)格線),label1(Text類實(shí)例,下/左軸刻度標(biāo)簽),label2,gridOn(boolean,網(wǎng)格線的開關(guān),類似的還有tick1/2On,label1/2On)。
83. 示例代碼:import matplotlib.ticker as tickertick(沿用之~),label1On = False, tick.label2.set_color('green')。
Chap 10 Legend guide
84. 閱讀本章之前需要把legend()命令和matplotlib.legend.Legend類的說明看完,ft……
85. 好吧,先跳到legend()命令的說明。生成圖例:legend((line1, line2, line3), ('label1', 'label2', 'label3')),第一個(gè)tuple是Line2D,第二個(gè)里是各line的名字。要是省略第一個(gè)tuple應(yīng)該就默認(rèn)分配line的樣式了吧。legend( ('label1', 'label2', 'label3'), loc='upper left'),loc指定錨定點(diǎn)在文本框中的位置。loc可用代碼表示,從0到10共11種,用bbox_to_anchor調(diào)整所指定的loc的坐標(biāo),bbox_transform轉(zhuǎn)換坐標(biāo)系統(tǒng)。也可以用數(shù)字表示loc,標(biāo)定圖例框左下角的位置,此時(shí)無視bbox屬性。
86. 其他的kwargs:title[string],標(biāo)題;markerscale,marker的相對(duì)大小;shadow,陰影;mode,延伸覆蓋Axes區(qū)域的開關(guān);還有numpoints和scatterpoints,沒整明白。
87. Padding(pad到底指的是什么?)和spacing各屬性的kwarg,估計(jì)對(duì)我這種control freak比較重要:borderpad,應(yīng)該是文字到框的距離;labelspacing,標(biāo)簽之間的行距;handlelength,legend handles(圖例圖像本身?)的長度;handletextpad,legend handle和文字的間距;borderaxespad,注釋框和坐標(biāo)軸的間距;columnspacing,欄間距。Spacing用于描述同類對(duì)象的間距,padding描述不同類型對(duì)象的間距?
88. 然后俺再跳到Legend類的說明。類的全部屬性和默認(rèn)設(shè)置:class Legend(parent, handles, labels, loc=None, numpoints=None, markerscale=None, scatterpoints=3,scatteryosets=None,prop=None,pad=None,labelsep=None, handlelen=None,handletextsep=None,axespad=None,borderpad=None, labelspacing=None,handlelength=None,handletextpad=None,borderaxespad=None, columnspacing=None,ncol=1,mode=None,fancybox=None,shadow=None,title=None, bbox_to_anchor=None,bbox_transform=None),其中parent是包含Legend的Artist,handle是圖例中的圖像,label是圖例標(biāo)簽,其他的跟legend()命令說明里的相同。如果值為'None'則沿用rc參數(shù)。
89. 再跳回來開始看Chap 10。如果不指定圖例樣式和標(biāo)簽則legend()自動(dòng)調(diào)用get_legend_handles_labels(),返回一個(gè)tuple,包括artist列表和標(biāo)簽列表,作為圖例標(biāo)簽。artist列表里包括ax.lines, ax.patches和LineCollection和RegularPolyCollection類,由get_label()返回的這些對(duì)象的標(biāo)簽屬性值作為圖例中的標(biāo)簽。如果標(biāo)簽空缺或者以"_"開頭,則該artist不進(jìn)入返回結(jié)果。如果想要附加圖例的對(duì)象不在這幾類之內(nèi)只能用笨辦法自己寫代碼定制。
90. reverse列表:[list][::-1]。
91. zip([list1],[list2])太可愛了!怎么以前都不知道有這么好的東西……作用是生成新的list,元素是tuple,tuple的元素依次是list1, list2的第1,2,……項(xiàng)。支持n個(gè)列表。zip(*[list])將列表去zip化。
92. operator模塊下itemgetter()。可以和zip配合,用于指定排序中的key。比如zip了兩個(gè)列表,指定key=operator.itemgette(1),則按tuple里第二個(gè)元素大小對(duì)tuple的列表排序。
91. 為不默認(rèn)支持的類添加圖例,看不懂,過。
92. 多欄圖例。上不了網(wǎng)不能看例子,先存著吧。
93. 多塊圖例。問題在于使用legend()命令時(shí)創(chuàng)建了新的Legend類實(shí)例,原有的自動(dòng)被刪除。因此,需要手動(dòng)添加被刪掉的圖例。gca().add_artist(l1)。gca()返回當(dāng)前Axes/Subplot,add_artist添加已創(chuàng)建好的artist。
94. 圖例的loc代碼對(duì)應(yīng)表。剛認(rèn)識(shí)到似乎比較重要,所以特此補(bǔ)記。0代表best(不知道是哪里,可能每個(gè)準(zhǔn)兒吧);1,右上;2,左上;3,左下;4,右下;5,右邊;6,center left,可能是垂直置中水平右對(duì)齊;7,center right,垂直置中水平右對(duì)齊;8,lower center,可能是水平置中垂直置底;9,upper center,水平置中垂直置頂;10,心兒。
Chap 12 Transformations tutorial
95. 四種坐標(biāo)系統(tǒng):data, axes, figure, display。一般(95%)情況下不用考慮(太好了)。
96. data坐標(biāo)系統(tǒng),即沿用數(shù)據(jù)中的坐標(biāo)尺度體系。transformation對(duì)象是ax.transData(嘛意思?),可用方法:set_xlim(xmin,xmax)。可以用ax.transData類實(shí)例將data體系的坐標(biāo)轉(zhuǎn)化為display體系的(單位是像素),如ax.transData.transform((5, 0)),返回一個(gè)array。倒轉(zhuǎn)化:inv = ax.transData.inverted(),inv.transform((335.175, 247.)),將display體系轉(zhuǎn)化為data體系。
97. enumerate感覺像減弱版的zip,只接受一個(gè)參數(shù),生成一個(gè)type為enumerate的對(duì)象,不可切片,可以迭代,返回一個(gè)個(gè)tuple,其元素為0和參數(shù)里的各項(xiàng)。
98. 作多個(gè)panel的圖,終于明白subplot參數(shù)的含義了。第一個(gè)是多個(gè)subplot形成的陣列的行數(shù),第二是列數(shù),第三是當(dāng)前sbuplot的位置,默認(rèn)應(yīng)該是按行排列的,即(223)指左下角那個(gè)subplot。
99. 混合坐標(biāo)體系,多為data和axes的混用,通常用于highlight某個(gè)范圍,縮放時(shí)想想讓y軸隨圖縮放,但是保持x的范圍。有專門的方法:axhline(), axvline(), axhspan(), axvspan()。不適用于極坐標(biāo)。
100. 用法:建立Transformation類實(shí)例,trans=matplotlib.transforms.blended_transform_factory(ax.transData, ax.transAxes),x軸用data體系,y用axes體系。然后在創(chuàng)建基本類的時(shí)候指定transform=trans。
101. 后面的就當(dāng)前用途而言太高級(jí),過。
Chap 14 Annotating axes
102. 又得跳,就當(dāng)已經(jīng)讀過了吧。
103. 定義bbox:bbox_props = dict(boxstyle="rarrow,pad=0.3", fc="cyan", ec="b", lw=2),或者直接用圖中的:text.get_bbox_patch(),然后bb.set_boxstyle("rarrow", pad=0.6)。bbox的內(nèi)置style:larrow(向左箭頭),rarrow(向右箭頭),round(圓角矩形),round4(中央較寬圓角矩形),roundtooth(平滑線鋸齒外框),sawtooth(直線鋸齒外框),square(矩形外框)。
104. 除了bbox還可以用實(shí)線箭頭:arrowprops=dict(arrowstyle="->")。箭頭作圖包括四步:connect兩個(gè)點(diǎn)(由屬性connectstyle控制),clip以避免patch,shrink,箭桿部分mutate成多種多樣(由屬性arrowstyle控制)。
105. arrowstyle多種鍵值:angle(angleA=90,angleB=0,rad=0.0),angle3(angleA=90,angleB=0),arc(angleA=0,angleB=0,armA=None,armB=None,rad=0.0),arc3(rad=0.0),bar(armA=0.0,armB=0.0,fraction=0.3,angle=None)。各kwarg控制具體樣式,angleA控制出發(fā)點(diǎn)的角度,逆時(shí)針方向旋轉(zhuǎn)。angleB沒猜出來。arc3和angle3都借用雙曲線的一截,rad大概控制弧度。arc是三截折線,一個(gè)arm=0的話則為兩截線,rad是控制弧度的。
106. 箭頭樣式太fancy,過。
107. matplotlib.patches.ConnectionPatch:連接兩張圖中的點(diǎn)。加插頁的時(shí)候非常有用!用法:con = ConnectionPatch(xyA=xy, xyB=xy, coordsA="data", coordsB="data",axesA=ax1, axesB=ax2),創(chuàng)建ConnectionPatch類實(shí)例,用于連接axesA在coordsA體系下的坐標(biāo)點(diǎn)xyA和axesB在coordsB體系下的坐標(biāo)點(diǎn)xyB;ax2.add_artist(con),加到Axes上。
108. 在Axes的錨定點(diǎn)位置添加注釋:導(dǎo)入mpl_toolkits.axes_grid.anchored_artists.AnchoredText;創(chuàng)建AnchoredText類實(shí)例;add_artist加入axes。
109. 在Axes的錨定點(diǎn)位置添加繪圖區(qū)域,里面可以繼續(xù)加artist:導(dǎo)入mpl_toolkits.axes_grid.anchored_artists.AnchoredDrawingArea;創(chuàng)建AnchoredText類實(shí)例;drawing_area.add_artist添加圖形,add_artist添入axes。加入繪圖區(qū)域的artist的transformation參數(shù)會(huì)被目標(biāo)axes覆蓋。
110. 在Axes的錨定點(diǎn)位置添加繪圖區(qū)域,里面可以繼續(xù)加artist,允許自帶transformation:導(dǎo)入mpl_toolkits.axes_grid.anchored_artists.AnchoredAuxTransformBox;
111. 圖中某些區(qū)域的縮放,同樣,加插頁的時(shí)候非常有用!方法:利用mpl_toolkits.axes_grid.inset_locator(從名字上看似乎這個(gè)才是用于作插頁圖的)。
到這里算看完了,感覺還是不會(huì)寫代碼,對(duì)于某個(gè)具體的對(duì)象不能馬上想到需要定制的屬性的鍵和值,
說明兩點(diǎn):看cookbook是很重要的,還有i'm a bad programmer...
總結(jié)
以上是生活随笔為你收集整理的matplotlib学习笔记.CookBook的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq邮箱app怎么登录(登录QQ邮箱)
- 下一篇: matplotlib简介-高质量图形输出