图画不出来,代码已经较为完整。
import pykalman
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from pykalman import KalmanFilter
import pandas as pd
import math
#速度的系数使预测的曲线更加贴近于真实曲线
#Q越大,越相信测量值;越小,越相信上一次的估计值
kf = KalmanFilter(transition_matrices=np.array([[1, 3], [0,1]]),
observation_matrices =np.array([1,0]),
transition_covariance= 0.5*np.eye(2))
df = pd.read_csv("data1.csv")
df1 = pd.DataFrame(df)
df2 = df1.iloc[:,12]
df3= df1.iloc[:,13]
df4= df1.iloc[:,14]
x=np.mat(df2)
y=np.mat(df3)
z=np.mat(df4)
def kalman_predict(x, y, z, iter):
global t, filtered_state_means0, filtered_state_covariances0, lmx, lmy, lmz, lpx, lpy, lpz
if iter == 0:
#上一时刻的状态X(k-1)
filtered_state_means0=np.array([[x, y, z], [0.0, 0.0, 0.0]])
#矩阵P初始值
filtered_state_covariances0=np.eye(2)
lmx, lmy, lmz = x, y, z
lpx, lpy, lpz = x, y, z
else:
dx = (x-lmx, y-lmy, z-lmz)
#跟矩阵H对应着,Zk
next_measurement = np.array([x, y, z])
#next_measurement = np.array([x, y, z])
cmx, cmy, cmz = x, y, z
filtered_state_means, filtered_state_covariances= (kf.filter_update( filtered_state_means0, filtered_state_covariances0, next_measurement, transition_offset = np.array([0,0,0])))
cpx, cpy, cpz= filtered_state_means[0][0], filtered_state_means[0][1], filtered_state_means[0][2]
#绘制真实轨迹和卡尔曼预测轨迹,蓝色是测量值,绿色是预测值
ax.plot([lmx, cmx], [lmy, cmy], [lmz, cmz], 'b', label = 'measure', linewidth = 4.0)
ax.plot([lpx, cpx], [lpy, cpy], [lpz, cpz], 'g', label = 'predict', linewidth = 3.0)
plt.pause(0.9)
filtered_state_means0, filtered_state_covariances0 = filtered_state_means, filtered_state_covariances
lpx, lpy, lpz = filtered_state_means[0][0], filtered_state_means[0][1], filtered_state_means[0][2]
lmx, lmy, lmz = cmx, cmy, cmz
if __name__ == '__main__':
fig = plt.figure()
ax = fig.add_axes(Axes3D(fig))
font1 = {'size': 23}
font2 = {'size': 17}
#设置X、Y、Z坐标轴的数据范围
ax.set_zlim([-2,1.35])
ax.set_xlim([-2,1.35])
#ax.set_xticks([0.70, 0.75, 0.80, 0.85])
ax.set_ylim([-0.5,2])
#添加X、Y、Z坐标轴的标注
ax.set_xlabel('X(m)',font1,labelpad=28)
ax.set_ylabel('Y(m)',font1,labelpad=28)
ax.set_zlabel('Z(m)',font1,labelpad=28)
ax.tick_params(labelsize=18,pad=8)
本段代码是一个可视化程序,使用了 matplotlib 库进行图形绘制。
如果出现图画不出来的情况,很可能是 matplotlib 的显示模式设置的问题。如果你运行的是 Python 脚本文件,
需要在代码中添加以下两行,才能正常显示图形:
import matplotlib
matplotlib.use('TkAgg')
如果你使用的是 Jupyter Notebook 或者 ipython,可以在代码的开始处加入以下命令:
%matplotlib inline
这行命令会使 matplotlib 以 inline 模式运行,图形将直接插入到 notebook 中。
如果以上方法都不能解决问题,你还可以尝试升级 matplotlib 库或者检查是否有其他库冲突导致运行出错。希望这些信息对你有所帮助。