参考文献:这个更详细,本文比较简略
https://blog.csdn.net/u013317445/article/details/88175366#snsrelplot_7
1 初步使用:画轨迹点-或者线形图
注意:这里画一个轨迹点非常容易,但是要是画多个轨迹点怎么办?
如果我将所有船的轨迹都搞到一个dateframe里面会是个什么样子?
如果那样的话,我画图代码就不方便了,必须这么做:经纬度不分本船和目标船,需要另外添加一列说明这是本船还是目标船
可以通过下面的代码进行拼接
pd.concat([df1, df4], axis=1)
本文主要基于seaborn进行画图,比如画轨迹和matplotlib类似,3条语句就搞定了,replot在本人的另一篇博客也有讲解,记得还有一个类似的函数
relplot ==0.9.0 才有这个函数,高版本没有这个函数
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
# 数据
datefram = pd.read_csv("./data/OS_send_to_ECDI.csv")
# matplotlib画法
# plt.plot(datefram["OwnShip_Longitude"],datefram["OwnShip_Latitude"])
sns.relplot(x="OwnShip_Longitude", y="OwnShip_Latitude", kind="line", data=datefram, ci=None)
# 可以手动设置label但是一般不用,因为他自动设置列名
# plt.xlabel(u'times',) # 不能使用中文,maplotlib处理方法也不好使
# plt.ylabel(u'TargetShip_Collision',)
plt.show()
下面代码运行效果
例子2
# coding: utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from collections import OrderedDict
# %matplotlib inline
# plt.rcParams['font.sans-serif']=['SimHei'] #这两行用来显示汉字
# plt.rcParams['axes.unicode_minus'] = False
dataframe=pd.read_csv('TargetShip_information.csv')
sns.relplot(x='time', y='DCPA', data=dataframe, hue='TargetShip')
sns.relplot(x='time', y='TCPA', data=dataframe, hue='TargetShip')
plt.show()
设置水平线,标签,注释
# coding: utf-8
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei'] #这两行用来显示汉字
plt.rcParams['axes.unicode_minus'] = False
dateframe = pd.read_csv('TargetShip_information.csv')
sns.relplot(x='time', y='distance', data=dateframe, hue='TargetShip',kind="line")
# dateframe['every_decision_time'].plot(x = 'x',y ='y')
# plt.plot([0,1000],[0.28,0.28],linestyle= '--')
plt.axhline(y=0.28,ls=":",c="b")#添加水平直线
# plt.yticks((0.28),('0.28'))
plt.yticks((0.28,1,2,3,4,5))
plt.text(1200, 0.3, "船舶安全领域半径", size = 15,\
# family = "fantasy", # 这个不能显示汉字,显示汉字就不要了
color = "r", style = "italic", weight = "light",\
# bbox = dict(facecolor = "r", alpha = 0.2) # 在字的外面加上框框
)
plt.xlabel('时间/秒')
plt.ylabel(u'距离本船的距离/海里')
plt.show()