Matplotlib簡介和pyplot的簡單使用——局部放大圖

來源:互聯網
上載者:User

前面說過的,有怎樣畫局部放大圖的,例如左邊放原圖,右邊放局部放大的圖,並且在原圖中用一個方框或者什麼,把要放大的部分框起來,需要的話還可以用兩條線從方框指向放大的圖,
效果如所示,

這裡主要介紹如何畫方框和兩條線。
畫方框,使用了畫串連方框四個頂點的四條線段就可以了,從某個點繞個圈再回到起點,就畫出了方框,使用pyplot(x,y),還可以方便地指定顏色,線寬等。
然後是畫跨子圖的線,這裡使用連接線,在matplotlib.patches有一個ConnectionPatch類型,就是用的這個,它可以用在一個或多個子圖之間畫線,annotate好像只能在一個子圖裡面畫箭頭,應該可以沒有箭頭,那就是一條線了,與connectionPatch效果相同。
con = ConnectionPatch(xyA=xy1,xyB=xy0,coordsA="data",coordsB="data",
axesA=p1,axesB=p0)
p1.add_artist(con)
這裡xyA是p1裡面的點,xy0是p0裡面的點,coordsA和coordsB預設值"data",也不用改,然後就是axesA,要添加ConnectionPatch的子圖,axesB,要串連的子圖。需要注意的是,ConnectionPatch,是一種會覆蓋的畫圖操作,好象是這個意思吧,不需要繼續用了,也沒有深究下去的動力了。
最後使用p1.add_artist(con),將連接線添加進子圖。

另外要提醒一下的是,在使用公式文本的時候,需要使用raw字串,有時候不使用r"text"沒有問題,但有時候用到\的時候就需要使用r"text"來指明是raw字串了,比如輸入r"\alpha",如果不使用r說明是raw字串,就會出問題了。

完整代碼如下,

#!/usr/bin/env pythonimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.patches import ConnectionPatchdef f1(t):    return np.exp(-t)*np.cos(2*np.pi*t)def f11(t):    return np.exp(-t)*np.cos(2*np.pi*t+0.2)def f111(t):    return np.exp(-t+0.2)*np.cos(2*np.pi*t)t = np.arange(0.0,5.0,0.02)plt.figure(figsize=(16,8),dpi=98)p1 = plt.subplot(121,aspect=5/2.5)p2 = plt.subplot(122,aspect=0.5/0.05)label_f0 = r"$f(t)=e^{-t+\alpha} \cos (2 \pi t+\beta)$"label_f1 = r"$\alpha=0,\beta=0$"label_f11 = r"$\alpha=0,\beta=0.2$"label_f111 = r"$\alpha=0.2,\beta=0$"p1.plot(t,f1(t),"g",label=label_f1,linewidth=2)p1.plot(t,f11(t),"r-.",label=label_f11,linewidth=2)p1.plot(t,f111(t),"b:",label=label_f111,linewidth=2)p2.plot(t,f1(t),"g",label=label_f1,linewidth=2)p2.plot(t,f11(t),"r-.",label=label_f11,linewidth=2)p2.plot(t,f111(t),"b:",label=label_f111,linewidth=2)p1.axis([0.0,5.01,-1.0,1.5])p1.set_ylabel("v",fontsize=14)p1.set_xlabel("t",fontsize=14)#p1.set_title("A simple example",fontsize=18)p1.grid(True)p1.legend()tx = 0.5ty = 0.9p1.text(tx,ty,label_f0,fontsize=15,verticalalignment="top",horizontalalignment="left")p2.axis([4,4.5,-0.02,0.03])p2.set_ylabel("v",fontsize=14)p2.set_xlabel("t",fontsize=14)p2.grid(True)p2.legend()# plot the boxtx0 = 4tx1 = 4.5ty0 = -0.1ty1 = 0.1sx = [tx0,tx1,tx1,tx0,tx0]sy = [ty0,ty0,ty1,ty1,ty0]p1.plot(sx,sy,"purple")# plot patch linesxy=(4.45,0.09)xy2 = (4.02,0.026)con = ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",        axesA=p2,axesB=p1)p2.add_artist(con)xy = (4.45,-0.09)xy2 = (4.02,-0.018)con = ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",        axesA=p2,axesB=p1)p2.add_artist(con)plt.show()

恩,就這樣。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.