首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单个数据栏绘制多条线

从单个数据栏绘制多条线
EN

Stack Overflow用户
提问于 2019-03-29 12:22:47
回答 2查看 149关注 0票数 0

我试图用matplotlib从gps数据集中绘制时空图.目前我有一本大型数据字典。我字典里的每一个数据都是为一辆车准备的。

经过大量的过滤之后,我现在为每一辆车设置了我需要的两列,即"Time“列作为日期时间(已经格式化并可以绘制)和”距离“列作为float64类型。

我当前的绘图数据看起来是这样的数据:

代码语言:javascript
复制
Time    Distance
06:00   0
06:01   0,2
.   .   .
.   .   .
.   .   .
06:45   15
06:46   0
06:47   0,1
.   .   .
.   .   .
.   .   .
07:15   15
07:16   0

如您所见,我的距离列在0-15之间变化。我想要做的是,我希望每一个0-15的数据在一个时空图中用不同的线来表示。

我想要的是类似于此的东西;

如何绘制不同行的每0-15段的距离列?

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-29 13:32:29

您可以直接执行plt.plot(df.time, df.dist)并获得以下内容:

或者,您可以在不堆叠的情况下完成与Peter的解决方案类似的操作,以防有大量的时间块:

代码语言:javascript
复制
df['chunk'] = df['dist'].diff().lt(0).cumsum()

fig, ax = plt.subplots(1,1)
df.groupby('chunk').plot(x='time', y='dist', ax=ax, legend=False, c='b')
plt.show()

并获取

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 13:13:47

一种方法是创建一个新的列,该列用一个唯一的标签对每个连续的非递减值的运行进行标记,然后将这些标签unstack到列中。每个DataFrame列被绘制为一个单独的数据序列。

代码语言:javascript
复制
# Example data, a bit different from yours
df = pd.DataFrame({'Distance': [0.0, 0.2, 0.4, 0.6, 14.0, 15.0, 
                                0.0, 0.1, 14.0, 15.0, 
                                0.0, 0.3],
                   'Time': ['06:00', '06:01', '06:02', '06:03', '06:44', '06:45',
                            '06:46', '06:47', '07:14', '07:15',
                            '07:16', '07:17']})

# Convert time strings to datetime if needed
df['Time'] = pd.to_datetime(df['Time'])

# Add column that labels each run of non-decreasing values
df['Vehicle'] = df['Distance'].diff().lt(0).cumsum()

df
                  Time  Distance  Vehicle
0  2019-03-29 06:00:00       0.0        0
1  2019-03-29 06:01:00       0.2        0
2  2019-03-29 06:02:00       0.4        0
3  2019-03-29 06:03:00       0.6        0
4  2019-03-29 06:44:00      14.0        0
5  2019-03-29 06:45:00      15.0        0
6  2019-03-29 06:46:00       0.0        1
7  2019-03-29 06:47:00       0.1        1
8  2019-03-29 07:14:00      14.0        1
9  2019-03-29 07:15:00      15.0        1
10 2019-03-29 07:16:00       0.0        2
11 2019-03-29 07:17:00       0.3        2

# Reshape to one column per vehicle
df.set_index(['Time', 'Vehicle'])['Distance'].unstack()

Vehicle                 0     1    2
Time
2019-03-29 06:00:00   0.0   NaN  NaN
2019-03-29 06:01:00   0.2   NaN  NaN
2019-03-29 06:02:00   0.4   NaN  NaN
2019-03-29 06:03:00   0.6   NaN  NaN
2019-03-29 06:44:00  14.0   NaN  NaN
2019-03-29 06:45:00  15.0   NaN  NaN
2019-03-29 06:46:00   NaN   0.0  NaN
2019-03-29 06:47:00   NaN   0.1  NaN
2019-03-29 07:14:00   NaN  14.0  NaN
2019-03-29 07:15:00   NaN  15.0  NaN
2019-03-29 07:16:00   NaN   NaN  0.0
2019-03-29 07:17:00   NaN   NaN  0.3

# plot
df.set_index(['Time', 'Vehicle'])['Distance'].unstack().plot(marker='.')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55417368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档