Python使⽤matplotlib将离散的节点⽤光滑曲线连接
前⾔:
由于写论⽂需要测试算法的效率,所以需要使⽤某画图⼯具来将算法(分布式共识算法)的效率体现出来,本⼈⼀开始想到的是使⽤MATLAB,然后先不说其安装有多⿇烦,仅仅是⼤⼩,我这个苏菲婆就顶不住了,然后问了问师,师:Python。嗯。
⽤需要⽤到三个库:
· numpy
· matplotlib
· scipy
具体的作⽤就不介绍了,懂得都懂,但是安装只要安装后⾯两个就好了,matplotlib包含numpy
安装:
因为本⼈使⽤的是conda环境,所以在安装前先将⼀些东西升级
conda update conda
conda update anaconda
conda update anaconda-navigator    //update最新版本的anaconda-navigator
然后进⼊已经创建的环境,再安装matplotlib:
conda install matplotlib
conda install scipy
安装完成后开始测试(也可以省略这个步骤,我这段代码已经没了…或者你可以直接跑下⾯的代码,⼀样的):
说明你的⼀切都已经就绪了,剩下的就只要按照⾃⼰的需求画出对应的图即可。
代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import make_interp_spline
# 两个是配置代码,第⼀⾏表⽰,允许使⽤中⽂,第⼆个表⽰允许使⽤负数
# 这三个表⽰就跟名字⼀样,标识作⽤
plt.title("Four Nodes State")
plt.xlabel("Time(sec)")
plt.ylabel("State xi i=0,1,...4")
# 这个前两参数表⽰横坐标的开始和结尾,第三个参数表⽰你要分成多少份
x = np.linspace(0,10,1000)
# 下⾯是节点个状态信息,⼀定要使⽤numpy⾃带的array,不然会出错
node1State = np.array([-4,-3,-2,-1,0,1,2,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0])
linspace numpytimes = np.array([0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10])
# 这个就是最重要的平滑操作了,要是不使⽤这个操作的话,画出来的就是点和点之间的直线
model0 = make_interp_spline(times, node1State)
ys0 = model0(x)
# 给每条线设定颜⾊,和添加label,linestyle表⽰你要使⽤曲线的样式,有多少种⽹上有
plt.plot(x, ys0, color='red', label='Node 0', linestyle='-.')
# legend() 函数只有在你需要使⽤laber 这个参数的时候才会⽤到
plt.legend()
plt.show()
上述代码跑出来图如下:
问题:
⾄于节点数据的问题,我这⾥就是使⽤现成的数据,因为本⼈是使⽤golang来跑算法的,但是golang画图的库真的能让⼈哭出来,所以就直接跑算法的时候将相关数据存取来,然后在导⼊到Python这边。
其他问题,实⼒有限,确实爱莫能助。
参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。