python_network 三

本文介绍了Matplotlib的基本使用方法,包括线条样式、坐标轴设置、子图布局等内容,并通过实例展示了如何绘制点与拟合曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  0.Matplotlib小记 

     Matplotlib的笔记一直拖着,最近发现自己从图书馆借来的书要到期了,还是做个笔记,免得到时候要查阅又麻烦了。

     import matplotlib.pyplot as plt

      默认情况下,画出来的是点连成的线,针对点和线,其区分的一个较为容易的是格式的设置。

      1.点和线的设置

       形:

           对于线来说包括:'-' 直线;  ‘- -’虚线(其中中间没空格,这里为了好区分加的);    ‘-.’虚线加点 ;  ':'点式直线(这个记不清了)

           对于点来说:‘.’小点儿    ; ‘,’ 点的形状是像素点;‘o’点是圆形的;‘v’上三角 ;‘^’下三角;‘s’方形;‘p’五角星;‘*’星形;‘+’加号;‘|’竖线;‘—’横线

       色:

           颜色有:‘b’--blue    ‘g’--green   ‘r’--red   'c'--cyan  'k'--black

     2.设置x和y轴的坐标范围

          plt.xlim(x1,x2)

          plt.ylim(y1,y2)

          plt.grid(True)//网格线

           xlim和ylim设定了范围,而ax=plt.gca()之后通过ax可以设定主刻度和副刻度ax.xaxis.set_major_locotor(MultipleLocator(float))  ...set_minor_locator(y轴上的修改为y即可);除了刻度,x轴和y轴上对于同一个区间,例如0.1,可能长度不同,即axes per unit length可能不等,这时需要一句话搞定ax.set_aspect("equal")

     3.图中的小图划分

         对于每个图figure,可以显示多个plot,plt.subplot()可以对画布figure进行划分,例如plt.subplot(211)将画布分为了2行1列共2个区域。

         可以利用plt.sca()进行subplot切换;利用plt.savefig()中的dpi属性设置其像素;利用plt.rc('font', size=8)设置全局字体大小为8;可以利用plt.xlabel()设置fontsize来设置subplot中x轴下方的字体大小

        以例子:

[python]  view plain  copy
 print ?
  1. '''''这里定义了四个subplot,第一个命名为ax1,第二个为ax2....'''  
[python]  view plain  copy
 print ?
  1. ax1=plt.subplot(221)  
  2. ax2=plt.subplot(222)  
  3. ax3=plt.subplot(223)  
  4. ax4=plt.subplot(224)  
[python]  view plain  copy
 print ?
  1. plt.sca(ax1)'''''可以通过plt.sca()进行subplot的切换'''  
  2. tt=plt.plot(xins,yins,'b--',xin,yin,'r-')  
  3. plt.xlabel('indegree, r=0.6, t=5')  
  4. plt.ylabel('The CDD of indegree')  
  5. plt.legend(tt,['original','curve'],numpoints=1)  
  6. plt.sca(ax2)  
  7. tt=plt.plot(xouts,youts,'b--',xout,yout,'r-')  
  8. plt.xlabel('outdegree, r=0.6, t=5')  
  9. plt.ylabel('The CDD of outdegree')  
  10. plt.legend(tt,['original','curve'],numpoints=1)  
  11. plt.sca(ax3)  
  12. tt=plt.plot(xins1,yins1,'b--',xin,yin,'r-')  
  13. plt.xlabel('indegree, r=0.6, t=5')  
  14. plt.ylabel('The CDD of indegree')  
  15. plt.legend(tt,['original','curve'],numpoints=1)  
  16. plt.sca(ax4)  
  17. tt=plt.plot(xouts1,youts1,'b--',xout,yout,'r-')  
  18. plt.xlabel('outdegree, r=0.6, t=5')  
  19. plt.ylabel('The CDD of outdegree')  
  20. plt.legend(tt,['original','curve'],numpoints=1)  
  21. plt.savefig('F:/expriment/random_walk/gpn08_'+'6'+'_5'+'.png',dpi=600)  

  

   4.一些标注

         可以在右上角加上曲线或点的标注,语句:plt.plot(x,y,label="....")

        此时需要执行plt.lengend()语句才能显示,当然执行legend操作的时候可以不带任何参数,也可以修改一些参数

      5.  实例

        借助之前的curve_fit,将点和与之拟合的曲线画出来

[python]  view plain  copy
 print ?
  1. def func(x,a,b):  
  2.     return (b-a/np.log(x))  

[python]  view plain  copy
 print ?
  1. def power_law():  
  2.     xnodes=np.array([1098,1715,3330,8913,9638,14012,15632,24920,25852,35993,41213],dtype=float)  
  3.     ylaw=np.array([4.96858,4.65149,4.28484,3.32612,3.35046,3.32751,3.219,3.012,2.90853,2.76331,2.71217],dtype=float)  
[python]  view plain  copy
 print ?
  1. '''''这里对a和b的初始值进行了假设,应该是通过梯度下降的方法来计算拟合的a和b值的,初始值对最终拟合结果有影响'''  
  2. y0=func(xnodes,16.667,2)  
  3. popt,pcov=curve_fit(func,xnodes,ylaw)  
  4. x=np.arange(xnodes[0],xnodes[10],1000)  
  5. a,b=float(popt[0]),float(popt[1])  
  6. tt=plt.plot(xnodes,ylaw,'b+',x,func(x,a,b),color='blue')  
[python]  view plain  copy
 print ?
  1. '''''原来的点是用蓝色和+形来描绘的,通过拟合得到的则是蓝色的曲线了,因为默认情况下是描绘曲线的'''  
  2. plt.legend(tt,['origin_data','fitting_curve'],numpoints=1)  
[python]  view plain  copy
 print ?
  1. '''''这里通过设置tt的属性,使得在图像的右上角显示了注释,默认的numpoints为2,改为2试一下就知道是啥情况了~~'''  
  2. plt.show()  
  3. return a,b  
        这里,直接把数据存储了,然后进行拟合和画线。

       结果如下


        其实,在进行幂律拟合的时候,拟合程度是有判定的,建议去看看这篇文章Power-law distributions in empirical data(里面有一个工具plfit,可以计算log似然估计fit值和kolmogorov-Smirnov fit值,比俺用networkx进行拟合的这小例子cool多了),继续探索,会发现老外提供了更强的的程序包(斯坦福大学的SNAP也不错),话说国内做复杂网络相关的好像只会说被人有个啥,自己用啥从来不说。

       为啥人家老外啥都公开,包括数据集和程序库,咱国内不仅水平低还关门造车,让学术不外传,open不够啊,这真像古代秦晋时候的贵族豪门。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值