实现效果如下图所示
伪代码如下所示:
iters = 0
while 条件:
iters +=1
RC[iters] += 更新
RCIters.extend(RC.T.tolist()) 更新
fig = plt.figure(1)
#最大化显示
manager = plt.get_current_fig_manager()
manager.window.showMaximized()
plt.ion() # 动态显示
plt.clf() # 清屏
left = fig.add_subplot(121)
left.set_xlabel('X')
left.set_ylabel('Y')
left.set_title('回归')
left.scatter(X[:, 0], Y, s=1) # 绘制散点
# 为什么需要排序?因为plot默认是顺序绘制,当点都在一条直线上的时候,重叠在一起,看不出来
# 当点不在一条直线上的时候,
srtInd = X[:, 0].argsort(0).T.tolist()[0] # 排序,返回索引值
xSort = X[srtInd][:, 0]
left.plot(xSort, preY[srtInd], 'r') # 绘制拟合直线
ax1 = fig.add_subplot(122)
# 权重与迭代次数关系
ax1.set_xlabel('迭代次数')
ax1.set_ylabel('权重')
ax1.set_title('批量梯度下降:同步更新参数')
ax1.plot(RCIters)#绘制权重参数与迭代次数关系
# 残差与迭代次数关系
ax2 = ax1.twinx()
ax2.set_ylabel('残差')
ax2.set_xlabel('迭代次数')
ax2.plot(LossList, 'k--')#绘制总残差线
# 保存图片
# plt.savefig('./Data/Gif/' + str(iters).zfill(3) + '.jpg')#填充数字
plt.show()
plt.pause(0.001)#延时
plt.ioff() # 关闭交互模式
使用plot的时候哪种情况下需要先排序然后再绘制线段