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