首页 > 编程知识 正文

networkx中文手册,networkx安装

时间:2023-05-04 02:18:41 阅读:220434 作者:47

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轴下方的字体大小

        以例子:

'''这里定义了四个subplot,第一个命名为ax1,第二个为ax2....'''ax1=plt.subplot(221)ax2=plt.subplot(222)ax3=plt.subplot(223)ax4=plt.subplot(224)plt.sca(ax1)'''可以通过plt.sca()进行subplot的切换'''tt=plt.plot(xins,yins,'b--',xin,yin,'r-')plt.xlabel('indegree, r=0.6, t=5')plt.ylabel('The CDD of indegree')plt.legend(tt,['original','curve'],numpoints=1)plt.sca(ax2)tt=plt.plot(xouts,youts,'b--',xout,yout,'r-')plt.xlabel('outdegree, r=0.6, t=5')plt.ylabel('The CDD of outdegree')plt.legend(tt,['original','curve'],numpoints=1)plt.sca(ax3)tt=plt.plot(xins1,yins1,'b--',xin,yin,'r-')plt.xlabel('indegree, r=0.6, t=5')plt.ylabel('The CDD of indegree')plt.legend(tt,['original','curve'],numpoints=1)plt.sca(ax4)tt=plt.plot(xouts1,youts1,'b--',xout,yout,'r-')plt.xlabel('outdegree, r=0.6, t=5')plt.ylabel('The CDD of outdegree')plt.legend(tt,['original','curve'],numpoints=1)plt.savefig('F:/expriment/random_walk/gpn08_'+'6'+'_5'+'.png',dpi=600)

  

   4.一些标注

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

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

      5.  实例

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

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

       结果如下


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

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

参考资料:

       http://hyry.dip.jp:8000/pydoc/matplotlib_intro.html

      http://flyfeeling.blogbus.com/logs/53148228.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。