Построение нескольких строк из одного столбца данных - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь построить пространственно-временную диаграмму из набора данных gps с помощью matplotlib. В настоящее время у меня есть большой словарь данных. Каждый фрейм данных в моем словаре для одного транспортного средства.

После большого количества фильтрации у меня в настоящее время есть два столбца, которые мне нужны для каждого транспортного средства, а именно столбец «Время» как Datetime (уже отформатирован и может быть нанесен на график) и столбец «Расстояние» как тип float64.

Мои текущие графические данные выглядят так, как данные:

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 данных были представлены разными линиями на диаграмме пространства-времени.

То, что я хочу построить, является чем-то похожим на это;

! https://cramster -image.s3.amazonaws.com / Определения / CL-3347V2.png

Как я могу построить свой столбец расстояния для каждого 0-15 сечения с разными линиями?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Вы можете сделать прямое plt.plot(df.time, df.dist) и получить это:

enter image description here

Или вы можете сделать решение Питера без стеков, если у вас естьмного кусков времени:

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()

и получаем

enter image description here

0 голосов
/ 29 марта 2019

Один из способов - создать новый столбец, который будет помечать каждый цикл последовательных неубывающих значений уникальной меткой, а затем unstack эти метки в столбцах.Каждый столбец DataFrame представлен в виде отдельного ряда данных.

# 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='.')

spacetime diagram

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...