график зависимости 3 параметров (PosX, PosY) от времени. Это данные временных рядов - PullRequest
0 голосов
/ 23 января 2020

Я новичок в этом модуле. У меня есть данные временного ряда для движения частицы во времени. Движение имеет свои компоненты X и Y против времени T. Я хочу построить эти 3 параметра на графике. Пример данных выглядит следующим образом. Первый столбец представляет время, 2-й координаты, 3-й Y-кординат.

1,5193 618,3349 487,5595
1,5193 619,3349 487,5595
2,5193 619,8688 489,5869
2,5193 620,8688 489,5863 6156 226 683 151 616 616,31 * 3,5193 623,9027 493,3156

1 Ответ

0 голосов
/ 24 января 2020

Если вы хотите добавить 3-ю информацию к 2D-кривой, можно использовать цветовое отображение, устанавливающее связь между значением 3-й координаты и набором цветов.

В Matplotlib мы имеем не прямой способ построения кривой с изменяющимся цветом, но мы можем подделать ее, используя matplotlib.collections.LineCollection.

. В дальнейшем я использовал произвольную кривую, но я не сомневаюсь, что Вы можете настроить мой код в соответствии с вашим конкретным вариантом использования, если мой код соответствует вашим потребностям.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

# e.g., a Lissajous curve
t = np.linspace(0, 2*np.pi, 6280)
x, y = np.sin(4*t), np.sin(5*t)

# to use LineCollection we need an array of segments
# the canonical answer (to upvote...) is https://stackoverflow.com/a/58880037/2749397
points = np.array([x, y]).T.reshape(-1,1,2)
segments = np.concatenate([points[:-1],points[1:]], axis=1)

# instantiate the line collection with appropriate parameters,
# the associated array controls the color mapping, we set it to time

lc = LineCollection(segments, cmap='nipy_spectral', linewidth=6, alpha=0.85)
lc.set_array(t)

# usual stuff, just note ax.autoscale, not needed here because we
# replot the same data but tipically needed with ax.add_collection

fig, ax = plt.subplots()
plt.xlabel('x/mm') ; plt.ylabel('y/mm')
ax.add_collection(lc)
ax.autoscale()

cb = plt.colorbar(lc)
cb.set_label('t/s')

# we plot a thin line over the colormapped line collection, especially
# useful when our colormap contains white...
plt.plot(x, y, color='black', linewidth=0.5, zorder=3)

plt.show()

enter image description here

...