matplotlib 绘制3个参数(PosX,PosY)与时间的关系图,这是一个时间序列数据

lnxxn5zx  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(147)

我是新来的这个模块。我有时间序列数据的运动粒子对时间。运动有其X和Y分量对时间T。我想在图中绘制这3个参数。样本数据看起来像这样。第一列代表时间,第二-X坐标,第三Y坐标。

1.5193      618.3349        487.5595    
1.5193      619.3349        487.5595    
2.5193      619.8688        489.5869    
2.5193      620.8688        489.5869    
3.5193      622.9027        493.3156    
3.5193      623.9027        493.3156
inkz8wg9

inkz8wg91#

如果您想将第三个信息添加到2D曲线,一种可能性是使用颜色Map,在第三个坐标的值和一组颜色之间建立关系。
在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()

相关问题