前言
- 数据清洗过程中,需要对某范围内数据进行筛选,需要同时满足横轴和纵轴的范围要求,如矩形的长和宽范围内的节点,或某海域内的船舶节点。
- 需要分别对横轴范围和纵轴范围依次进行判断筛选,若同时进行判断,会出现横纵轴数据长度不相等的情况,不利于绘图。
一、准备好需要筛选的数据集
以船舶分布为例,筛选出某矩形海域内船舶节点
# 选定矩形区域(可手动设置或传参设置)
start = [120, 30] # 矩形起点(左下角)
end = [122, 32] # 矩形终点(右上角)
# 获取数据内船舶经纬度及mmsi
lon_x = data['lon']
lat_y = data['lat']
mmsi = data['mmsi']
将数据打包,便于统一提取
# 将三组数据进行打包处理
dict = list(zip(mmsi, lon_x , lat_y))
二、开始进行数据筛选
经纬度顺序先后没有影响,只是不能同时进行
1.首先对经度进行筛选
# 筛选矩形范围内经度节点
temp= [] # 将初步筛选的节点保存到临时列表中
for i in range(len(dict)):
a = dict[i][1]
if start[0] <= a <= end[0]:
temp.append(dict[i])
2.然后对纬度进行筛选
# 在经度范围内,筛选矩形范围内纬度节点,即符合矩形条件的最终节点
coordinates = []
for j in range(len(temp)):
b = temp[j][2]
if start[1] <= b <= end[1]:
coordinates.append(temp[j])
3.提取船舶节点x、y坐标信息
longitude = []
latitude = []
mmsi = []
for i in range(len(coordinates)):
latitude.append(coordinates[i][2])
longitude.append(coordinates[i][1])
mmsi.append(coordinates[i][0])
三、绘制船舶分布图
# 绘制散点图
plt.scatter(longitude, latitude)
# 为散点添加标签
for i, msi in enumerate(mmsi):
plt.annotate(msi,(longitude[i], latitude[i]),textcoords='offset points', xytext=(0, 10), ha='center')
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置坐标轴标签
plt.xlabel('经度')
plt.ylabel('纬度')
# 显示图表
plt.show()
plt.annotate的使用方法可以参考matplotlib和plt.annotate()函数解析(最清晰的解释)
绘图显示
数据特殊,截取图片部分内容
总结
记录一下,便于自己复习查阅,也为有需要的小伙伴提供小小的帮助。
某大佬如有优化的意向,还望不吝赐教【抱拳】