python - 如何使用matplotlib分组绘制坐标轴
问题描述
我的 csv 中的数据如下所示:
staff_id clock_time device_id latitude longitude
1001 2020/9/20 7:26 d_1 24.48237852 118.1558955
1001 2020/9/20 5:30 d_1 24.59689407 118.0863806
1001 2020/9/18 4:17 d_2 24.59222786 118.0955275
1001 2020/9/16 3:33 d_2 24.59208312 118.0957197
1001 2020/9/15 8:34 d_2 24.59732974 118.0859644
1001 2020/9/14 4:43 d_2 25.68714724 119.3918519
1002 2020/9/13 1:17 d_3 24.58618235 118.1065715
1002 2020/9/11 9:20 d_3 24.63024186 118.0667598
1002 2020/9/10 7:22 d_3 24.48287497 118.1542957
1002 2020/9/7 5:38 d_4 25.07601853 118.7335211
1003 2020/9/5 5:44 d_6 24.59803941 118.0863071
1003 2020/9/4 7:37 d_6 24.48285023 118.1545752
1003 2020/9/3 2:38 d_6 24.6381382 118.0677933
1003 2020/8/31 6:43 d_7 24.49278011 118.1395677
1003 2020/8/30 11:41 d_7 24.59205252 118.0955596
1003 2020/8/29 3:35 d_7 24.51817637 118.1764342
1003 2020/8/28 5:05 d_7 24.59603175 118.0846872
1003 2020/8/27 2:55 d_8 26.39899424 117.7866387
1003 2020/8/26 7:45 d_8 26.39900029 117.7866379
1003 2020/8/26 3:09 d_8 26.40672436 117.8008659
1003 2020/8/26 0:26 d_8 26.89169118 117.1612365
1003 2020/8/25 9:38 d_8 26.89764297 117.1760012
1003 2020/5/19 8:29 d_8 24.47420087 118.1085551
1003 2020/5/18 9:06 d_8 24.473124 118.1705641
1003 2020/5/16 7:54 d_8 24.5101858 117.8954614
我想按staff_id
and分组,然后用matplotlib画出每个人的轨迹坐标,是anddevice_id
的散点图,从旧时间到新时间根据。
怎么做?latitude
longitude
clock_time
对于 matplotlib,我唯一能写的代码是:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv(r'for_test.csv', sep=',', encoding='utf-8')
x = df['latitude']
y = df['longitude']
plt.plot(x,y)
plt.show()
但是没有按照staff_id和device_id进行分组,也没有按照时间序列的经纬度散点图。我想按照staff_id和device_id分组,每组画一张图。
解决方案
它对数据进行分组,并在循环过程中从生成的组对象中为每个组绘制散点图。准备与组数相同的颜色和标记类型。
gb = df.groupby(['staff_id','device_id'])
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
color = ['r','b','g','k','m','y','pink']
marker = ['o','8','s','p','*','h','D']
for c,m, (name, group) in zip(color,marker,gb):
gp = group
ax.scatter(gp.latitude, gp.longitude, color=c, s=100, marker=m, label=name)
plt.legend(loc='best')
plt.show()
推荐阅读
- java - 关闭并重新打开 Android 应用程序后无法访问/控制正在进行的下载
- python - 'str' 对象在 Django 中没有属性 'user' 错误
- azure - 如何从 Azure 应用服务访问外部元数据库配置文件
- c# - 在 Office 加载项 C# 中,是否可以选择仅在 office 应用程序顶部打开表单?
- svelte - Svelte 编译器生成多个 JavaScript 类定义
- javascript - 节点 repl 中奇怪的(让)变量赋值行为 - 无法赋值
- java - 使用 AES CBC 在 perl 中正确格式化初始化向量
- django - 在 Django 的 ManyToManyFields 中自定义(样式)ModelMultipleChoiceField
- mysql - 如何在mysql中添加数值的百分比
- python - 替换颜色图中的颜色(python 3.7)