日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matplotlib Tutorial(译)

發布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matplotlib Tutorial(译) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Matplotlib Tutorial(譯)

翻譯自:Matplotlib tutorialNicolas P. Rougier - Euroscipy 2012

  • toc
    {: toc}

這個教程基于可以從scipy lecture note得到的 Mike Müller的教程。

源代碼可從這里獲得。圖像在figures文件夾內,所有的腳本位于scripts文件夾。

所有的代碼和材料以Creative Commons Attribution 3.0 United States License (CC-by)發布。

特別感謝Bill Wing和Christoph Deil的檢查和校正。

引言

matplotlib大概是被使用最多的二維繪圖Python包。它不僅提供一個非常快捷的用python可視化數據的方法,而且提供了出版質量的多種格式圖像。我們將要探索matplotlib包含最常見情況的交互模式。

Ipython 和 pylab模式

IPython是一個增強的Python交互shell,它擁有很多有趣的特性包括被命名的輸入與輸出,可使用shell命令,增強的調試和許多其它特性。當我們在命令參數中用-pylab(自從IPython0.12版變成--pylab),它容許交互的matplotlib會話有像Matlab/Mathematica樣的功能。

pylab

pylab提供了一個針對matplotlib面向對象繪圖庫的程序界面。它模仿Matlab(TM)開發。因此,pylab大部分的繪圖命令和參數和Matlab(TM)相似。重要的命令被交互示例解釋。

簡單繪圖

在這一部分,我們想在同一個圖片中繪制正弦和余弦函數。從默認設置開始,我們將一步一步地改進使它看上去更棒。

首先獲得正弦和余弦函數的數據:

from pylab import *X = np.linspace(-np.pi, np.pi, 256,endpoint=True) C,S = np.cos(X), np.sin(X)

X現在是一個numpy數組,包含從-π到+π(包含π)等差分布的256個值。C是正弦(256個值),S是余弦(256個值)。

運行這個例子,你可以在IPython交互會話鍵入它們

[lyy@arch ~]$ ipython2 --pylab Python 2.7.3 (default, Apr 24 2012, 00:00:54) Type "copyright", "credits" or "license" for more information.IPython 0.13 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details.Welcome to pylab, a matplotlib-based Python environment [backend: Qt4Agg]. For more information, type 'help(pylab)'.

或者你可以下載每個示例然后使用普通的的python運行它:

$ python exercice_1.py

你可以點擊相應圖片的獲得每一步的源碼。

使用默認

matplotlib有一套允許定制各種屬性的默認設置。你可以幾乎控制matplotlib中的每一個默認屬性:圖像大小,每英寸點數,線寬,色彩和樣式,子圖(axes),坐標軸和網格屬性,文字和字體屬性,等等。雖然matplotlib的默認設置在大多數情況下相當好,你卻可能想要在一些特別的情形下更改一些屬性。

from pylab import *X = np.linspace(-np.pi, np.pi, 256,endpoint=True) C,S = np.cos(X), np.sin(X)plot(X,C) plot(X,S)show()

示例默認

在以下腳本中,我們示例(并注釋)所有影響圖像外觀的圖像設定。這些設定被顯式地設置成它們的默認值,但是現在你可以交互地嘗試這些值來探索它們的作用(參考之后的線條屬性和線條樣式)。

# Import everything from matplotlib (numpy is accessible via 'np' alias) from pylab import *# Create a new figure of size 8x6 points, using 80 dots per inch figure(figsize=(8,6), dpi=80)# Create a new subplot from a grid of 1x1 subplot(1,1,1)X = np.linspace(-np.pi, np.pi, 256,endpoint=True) C,S = np.cos(X), np.sin(X)# Plot cosine using blue color with a continuous line of width 1 (pixels) plot(X, C, color="blue", linewidth=1.0, linestyle="-")# Plot sine using green color with a continuous line of width 1 (pixels) plot(X, S, color="green", linewidth=1.0, linestyle="-")# Set x limits xlim(-4.0,4.0)# Set x ticks xticks(np.linspace(-4,4,9,endpoint=True))# Set y limits ylim(-1.0,1.0)# Set y ticks yticks(np.linspace(-1,1,5,endpoint=True))# Save figure using 72 dots per inch # savefig("exercice_2.png",dpi=72)# Show result on screen show()

更改色彩和線寬

首先,我們想要余弦是藍色而正弦是紅色,它們的線條都稍厚一點。我們將也稍微更改圖片大小來使它更寬一點。

figure(figsize=(10,6), dpi=80) plot(X, C, color="blue", linewidth=2.5, linestyle="-") plot(X, S, color="red", linewidth=2.5, linestyle="-")

設置邊界

當前的圖像邊界有點太緊了一點,而且我們想要預留一點空間使數據點更清晰。

xlim(X.min()*1.1, X.max()*1.1) ylim(C.min()*1.1, C.max()*1.1)

設置刻度

當前刻度并不理想,因為它們不顯示正余弦中我們感興趣的值(+/-π,+/-π/2)。我們將更改它們讓它們只顯式這些值。

xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]) yticks([-1, 0, +1])

設置刻度標簽

刻度已經放置合適但是他們的標簽并不很清楚,我們可以猜出3.142是π但是最好讓它更直接。當我們設置刻度值時,我們也可以在第二個參數列表中提供相應的標簽。注意,我們用latex獲得更好渲染的標簽。

xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])yticks([-1, 0, +1],[r'$-1$', r'$0$', r'$+1$'])

移動軸線(spine)

軸線(spines)是連接刻度標志和標示數據區域邊界的線。它們現在可以被放置在任意地方,它們在子圖的邊緣。我們將改變這點,因為我們想讓它們位于中間。因為一共有四個軸線(上/下/左/右)。我們將通過將它們的顏色設置成None,舍棄位于頂部和右部軸線。然后我們把底部和左部的軸線移動到數據空間坐標中的零點。

ax = gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0))

添加圖例

讓我們在圖片左上角添加一個圖例。這僅僅需要向plot命令添加關鍵字參數label(之后將被圖例框使用)。

plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine") plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")legend(loc='upper left')

注解某些點

讓我們現在使用annotate命令注解一些我們感興趣的點。我們選擇2π/3作為我們想要注解的正弦和余弦值。我們將在曲線上做一個標記和一個垂直的虛線。然后,使用annotate命令來顯示一個箭頭和一些文本。

t = 2*np.pi/3 plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--") scatter([t,],[np.cos(t),], 50, color ='blue')annotate(r'$sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',xy=(t, np.sin(t)), xycoords='data',xytext=(+10, +30), textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--") scatter([t,],[np.sin(t),], 50, color ='red')annotate(r'$cos(\frac{2\pi}{3})=-\frac{1}{2}$',xy=(t, np.cos(t)), xycoords='data',xytext=(-90, -50), textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

魔鬼在于細節

由于藍色和紅色的線,刻度標簽現在很難看清。。我們可以讓它們更大并且調整它們的屬性使它們的背景半透明。這將讓我們把數據和標簽都看清。

for label in ax.get_xticklabels() + ax.get_yticklabels():label.set_fontsize(16)label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))

圖像,子區,子圖,刻度(Figures,Subplots,Axes,Ticks)

Note:這一段很繞,我不知道該怎么翻譯好。在matplotlib中axes容器處于核心地位。翻譯成子圖因為在《Python科學計算》中作者這樣稱呼.subplot翻譯成子區

目前我們已經隱式地使用了圖像(figure)和子圖(axes)的創建。這對快速繪圖很方便。我們通過顯式使用figure,subplot,axes可以控制更多圖像的呈現。一個圖像(figure)意味著用戶界面的整個窗口。在一個圖像中可以有些子區(subplot)。subplot將繪圖放置在常規的網格位置上而axes允許更自由的放置。它們都非常有用,取決于你的意圖。我們已經隱式地使用了figure和subplot。當我們調用plot時,matplotlib調用gca來獲取當前axes反過來調用gcf()獲取當前圖像(figure)。如果沒有當前圖像(figure),它調用figure()創建一個,嚴格地說,是創建一個subplot(111)。讓我們詳細看看。

圖像(Figure)

圖像是一個圖形用戶界面的窗口,以”Figure #”作為標題。相對于Python通常是0索引的,圖像是從一開始的。這顯然是matlab風格。這里有幾個決定圖像外觀的參數:

參數默認描述
num1圖像編號
figsizefigure.figsize圖像大小(寬度,高度)(英寸)
dpifigure.dpi每英寸分辨率
facecolorfigure.facecolor背景色
edgecolorfigure.edgecolor繪圖背景邊沿色
frameonTrue繪制框架與否

默認可以在資源文件^1指定,并將在大多數時間被使用。只有圖像的編號頻繁變動。

當你使用圖形用戶界面時,你可以通過點擊右上角^2的x來關閉一個圖像。但也可以用一種編程方式調用close來關閉一個圖像。取決于參數它關閉(1)當前圖像(無參數),(2)一個指定的圖像(以圖像編號或圖像實例作為參數),(3)所有圖像(以all作為參數)。

和其它對象一樣,你可以通過setp或set_somethin方法來設置圖像屬性。

子區(subplots)

你可以通過subplot在正常網格中布置圖像。你需要指定行數和列數和區域的編號。注意gridspec命令是個更強大的選擇。

子圖(axes)

子圖和子區(subplot)非常相似,但是允許把圖片放置到圖像(figure)中的任何地方。所以如果我們想要在一個大圖片中嵌套一個小點的圖片,我們通過子圖(axes)來完成它。

刻度(ticks)

良好格式化的刻度是準備發表的圖片中的重要部分。Matplotlib為刻度提供完全可配置的系統。刻度定位器指定刻度出現的位置,刻度格式器讓刻度看起來如你所愿。主刻度和次要刻度可以分別放置和格式化,每個默認主刻度并不顯示,也就是,它們只有一個空列表,因為它們作為空定位器(NullLocator)(參見下面)。

刻度定位器(Tick Locator)

這有幾個針對不同種類需求的各種定位器:

ClassDescription
NullLocator沒有刻度.
?
IndexLocator每到一個基數的倍數點放置一個刻度
?
FixedLocator刻度位置是固定的
?
LinearLocator決定刻度位置
?
MultipleLocator在每個基于基數倍數的整數點放置刻度
?
AutoLocator在不錯的位置選擇不超過n個間隔
?
LogLocator以log坐標決定刻度位置
?

所有這些定位器源于matplotlib基類matplotlib.ticker.Locator。你可以源于它創建你自己的定位器。處理時間刻度可能非常棘手。因此,matplotlib在matplotlib.dates中提供了特殊的定位器。

其它種類繪圖

常規繪圖

從下面的代碼開始,嘗試重新生成上邊的填充圖形。

from pylab import *n = 256 X = np.linspace(-np.pi,np.pi,n,endpoint=True) Y = np.sin(2*X)plot (X, Y+1, color='blue', alpha=1.00) plot (X, Y-1, color='blue', alpha=1.00) show()

提示:你需要使用fill_between命令。

點擊圖片獲取答案。

散點圖(scatter plots)

從以下代碼開始,嘗試生成上邊的圖形,注意標記大小,顏色和透明度。

from pylab import *n = 1024 X = np.random.normal(0,1,n) Y = np.random.normal(0,1,n)scatter(X,Y) show()

提示:色彩由(X,Y)角度給出。

點擊圖像獲取答案。

條形圖(bar plots)

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import *n = 12 X = np.arange(n) Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n) Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)bar(X, +Y1, facecolor='#9999ff', edgecolor='white') bar(X, -Y2, facecolor='#ff9999', edgecolor='white')for x,y in zip(X,Y1):text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')ylim(-1.25,+1.25) show()

提示:你要注意文本對齊。

點擊圖像獲取答案。

等高線圖(contour plots)

從以下代碼開始,嘗試生成上邊的圖形,注意色彩表。(參見色彩表)

from pylab import *def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)n = 256 x = np.linspace(-3,3,n) y = np.linspace(-3,3,n) X,Y = np.meshgrid(x,y)contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet') C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5) show()

提示:你需要使用clabel命令。

點擊圖像獲取答案。

Imshow

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import *def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)n = 10 x = np.linspace(-3,3,4*n) y = np.linspace(-3,3,3*n) X,Y = np.meshgrid(x,y) imshow(f(X,Y)), show()

提示:你需要注意imshow命令中圖像的來源,并且使用色彩條(colorbar)。

點擊圖像獲取答案。

餅圖(Pie charts)

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import *n = 20 Z = np.random.uniform(0,1,n) pie(Z), show()

提示:你需要改變Z。

點擊圖像獲取答案。

矢量圖(quiver plots)

從以下代碼開始,嘗試生成上邊的圖形,注意色彩和方向。

from pylab import *n = 8 X,Y = np.mgrid[0:n,0:n] quiver(X,Y), show()

提示:你需要畫兩次箭頭。

點擊圖像獲取答案。

網格(grids)

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import *axes = gca() axes.set_xlim(0,4) axes.set_ylim(0,3) axes.set_xticklabels([]) axes.set_yticklabels([])show()

點擊圖像獲取答案。

多圖繪制

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import *subplot(2,2,1) subplot(2,2,3) subplot(2,2,4)show()

提示:你可以對不同部分使用幾個subplot命令。

點擊圖像獲取答案。

極軸圖

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import *axes([0,0,1,1])N = 20 theta = np.arange(0.0, 2*np.pi, 2*np.pi/N) radii = 10*np.random.rand(N) width = np.pi/4*np.random.rand(N) bars = bar(theta, radii, width=width, bottom=0.0) for r,bar in zip(radii, bars): bar.set_facecolor( cm.jet(r/10.))bar.set_alpha(0.5) show()

提示:你僅僅需要修改axes這行。

點擊圖像獲取答案。

三維繪圖

從以下代碼開始,嘗試生成上邊的圖形,添加標簽和紅色條形。

from pylab import * from mpl_toolkits.mplot3d import Axes3Dfig = figure() ax = Axes3D(fig) X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R)ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot')show()

提示:你需要使用contourf命令。

點擊圖像獲取答案。

繪制文本

試著從頭做這個!提示:看一看matplotlib logo

點擊圖像獲取答案。

此教程之外

matplotlib受益于豐富的文檔和巨大的用戶和開發者社區。這有幾個有關的鏈接:

教程

pyplot教程

圖像教程

文本教程

artist對象教程

路徑教程

變換教程

matplotlib文檔

用戶手冊

常見問題

截圖

代碼文檔

代碼相當好的文檔化了,你可以在python會話中快速查詢指定命令

>>> from pylab import * >>> help(plot) Help on function plot in module matplotlib.pyplot:plot(*args, **kwargs)Plot lines and/or markers to the:class:`~matplotlib.axes.Axes`. *args* is a variable lengthargument, allowing for multiple *x*, *y* pairs with anoptional format string. For example, each of the following islegal::plot(x, y) # plot x and y using default line style and colorplot(x, y, 'bo') # plot x and y using blue circle markersplot(y) # plot y using x as index array 0..N-1plot(y, 'r+') # ditto, but with red plussesIf *x* and/or *y* is 2-dimensional, then the corresponding columnswill be plotted.

畫廊(Galleries)

當你搜尋如何繪制指定圖像時,matplotlib gallery也相當有用。每個例子和它的源碼一同被提供。

一個較小的畫廊在這里

郵件列表

最后,這里有一個用戶郵件列表,那里你可以尋求幫助。一個開發者郵件列表是更加技術性的。

快速參考

沒什么好翻譯的,看原文吧……傳送門

線條屬性

線型

標記

色彩表


from:?http://reverland.org/python/2012/09/07/matplotlib-tutorial/#ipython--pylab

總結

以上是生活随笔為你收集整理的Matplotlib Tutorial(译)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。