matplotlib java gral_Matplotlib简介和pyplot的简单使用——局部放大图

前面说过的,有怎样画局部放大图的,例如左边放原图,右边放局部放大的图,并且在原图中用一个方框或者什么,把要放大的部分框起来,需要的话还可以用两条线从方框指向放大的图,

效果如下图所示,

331ff3184550cc72a636c4ed5a802a0f.png

这里主要介绍如何画方框和两条线。

画方框,使用了画连接方框四个顶点的四条线段就可以了,从某个点绕个圈再回到起点,就画出了方框,使用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 python

importnumpy as npimportmatplotlib.pyplot as pltfrom matplotlib.patches importConnectionPatchdeff1(t):return np.exp(-t)*np.cos(2*np.pi*t)deff11(t):return np.exp(-t)*np.cos(2*np.pi*t+0.2)deff111(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 box

tx0 = 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 lines

xy=(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()

恩,就这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值