Как построить / разбросать географические координаты в python pandas - PullRequest
1 голос
/ 11 апреля 2020

Мне трудно построить что-то в pandas так, как я хочу.

У меня есть следы движения в CSV-файле, которые выглядят так:

NodeID | Time   | Lon              | Lat             # Line not in the CSV
0      | 38.665 |29564.86465677584 |37278.27065254189
0      | 64.29  |29529.86419382295 |37300.74058444612
0      | 80.74  |29511.18207467592 |37317.11012177728
1      | 166.3  |29593.54098394629 |37403.83872184437
1      | 188.98 |29622.25878085964 |37441.86538931914
1      | 219.33 |29658.04716892622 |37491.65280349273
.
.
.
20     | 566.3  |29593.54098394629 |37403.83872184437
20     | 888.98 |29622.25878085964 |37441.86538931914
30     | 919.33 |29658.04716892622 |37491.65280349273


Я читаю CSV с:

df = pd.read_csv(path, delimiter=' ', 
                 names=["node", "time", "x","y"], header=None)

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

Я пробовал это с:

df.plot(x='x', y='y', kind='scatter')
# or
df[NodeID:].plot(x='x', y='y', kind='scatter')
# or with matplotlib
ax = fig.subplots()
ax.plot(pddata['x'], pddata['y'], label='node ' + str(pddata['node'])) 

Но это всегда выглядит так это:

Plot of coordinates

Может ли кто-нибудь дать мне подсказку, как построить его так, как я хочу?

Ответы [ 2 ]

3 голосов
/ 11 апреля 2020

Это можно сделать с помощью пакета seaborn, это может быть очень полезно при построении графиков и работает с pandas. Просматривая его галерею, а также галерею графиков python, вы также можете получить вдохновение для ваших графиков.

https://seaborn.pydata.org/ https://python-graph-gallery.com/

Для вашей конкретной проблемы c с настроенным фреймом данных это, надеюсь, поможет:

import seaborn as sns
sns.lineplot(x='x', y='y', hue='node', marker='o', data=df)
0 голосов
/ 11 апреля 2020

Нашли решение, поблагодарившее некоторые подсказки в комментариях.

Теперь я использую matplotlip для построения графика и pandas для группировки:

fig = plt.figure(num=None, figsize=(15, 15), dpi=80, facecolor='w', edgecolor='k')
ax = fig.subplots()

df = pd.read_csv('Filename', delimiter=' ', names=["node", "time", "x","y"], header=None)

# Scatter for every node
for node, node_data in df.groupby('node'):
    ax.scatter(node_data['x'], node_data['y'], label='node ' + str(node), s=2,
    c=np.random.rand(3,))
    #or use ax.plot to show lines

plt.show()

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