matplotlib 如何在python中绘制时间序列数据

hyrbngr7  于 2022-12-13  发布在  Python
关注(0)|答案(1)|浏览(163)

我有一个2维的时间序列数据集,包含大约1000个样本。即我有一个1000个元素的长列表,每个条目是两个数字的列表。
我们可以想象一辆汽车的位置,x和y坐标,每秒拍摄一张照片,持续1000秒。当我画出这个图时,如下图所示,你可以得到一个不错的轨迹,但不清楚汽车在哪里开始或结束。也就是说,它是在哪个方向上行进的。我想在每个点之间包括箭头,但我认为这将得到相当集群(也许你知道一种方法来克服这个问题?)此外,我还想到了用一个光谱来给每个点着色,这样可以清楚地看到时间的增加,也就是说,随着时间的推移,从较热的点到较冷的点。你知道如何在matplotlib中实现这一点吗?

vvppvyoh

vvppvyoh1#

我相信你的两个想法都会很好地工作,我只是认为你需要测试哪个选项最适合你的情况。

选项1:箭头

为了避免绘图混乱,我认为您可以只在选定的点之间绘制箭头,以显示轨迹的大致方向。在下面的示例中,我只在点1和点2、点6和点7之间绘制箭头,以此类推。您可能希望增加点之间的间距,以使其适用于您的长序列。也可以连接由以下项分隔的点:10分,使它们更清晰可见。

import numpy as np
import matplotlib.pyplot as plt

# example data
x = np.linspace(0, 10, 100)
y = x

plt.figure()

# plot the data points
for i in range(len(x)):
    plt.plot(x[i], y[i], "ro")

# plot arrows between points 1 and 2, 6 and 7 and so on.
for i in range(0, len(x)-1, 5):
    plt.arrow(x[i], y[i], x[i+1] - x[i], y[i+1] - y[i], color = "black",zorder = 2, width = 0.05)

plt.xlabel('x')
plt.ylabel('y')
plt.show()

这将产生this图。

选项2:颜色

您可以从色彩Map表产生任意数量的色彩,也就是说您可以制作1000种连续色彩的清单。如此一来,您就可以以渐暖的色彩来绘制每个点。
示例:

import numpy as np
import matplotlib.pyplot as plt

# example data
x = np.linspace(0, 10, 100)
y = x

# generate 100 (number of data points) colors from colormap
colors = [plt.get_cmap("coolwarm")(i) for i in np.linspace(0,1, len(x))]

plt.figure()

# plot the data points with the generated colors
for i in range(len(x)):
    plt.plot(x[i], y[i], color = colors[i], marker = "o")

plt.xlabel('x')
plt.ylabel('y')
plt.show()

这产生this图,其中最早的数据点是冷的(蓝色),最新的是红的(暖的)。

相关问题