使用matplotlib绘制大量时间序列数据点的图表

5
我已经收集了一个月(30天)的传感器数据,每5分钟采集一次。这意味着我总共有288*30个数据点的时间序列数据。
我想将数据制成散点图(x轴:时间,y轴:传感器值)。以下代码是测试用的。
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

# generate time series randomly (length: 1 month)
rng=pd.date_range("2015-11-11",periods=288*30,freq="5min")
ts=pd.Series(np.random.randn(len(rng)),rng)

nr=3
nc=1

fig=plt.figure(1)
fig.subplots_adjust(left=0.04,top=1,bottom=0.02,right=0.98,wspace=0.1,hspace=0.1)

for i in range(3):
    ctr=i+1
    ax=fig.add_subplot(nr,nc,ctr)

    ax.scatter(ts.index,ts.values)
    ax.set_xlim(ts.index.min(),ts.index.max())

plt.show()

我生成了一组随机时间序列数据,共有288*30个观测值,并尝试将其绘制成散点图。然而,正如您所看到的,分析这张图是不可能的。

enter image description here

我希望你能满足以下条件重新绘制内容:

  1. 我希望有一个放大的图像版本,即一段时间范围内(例如2-3小时)的某些数据点一次性显示出来。然后,相邻点之间应有足够的空间。

  2. 我想把图形保存为png或pdf文件。然后,如果我打开文件,图像(或pdf)查看器会有一个水平滚动条,使我可以浏览整个图形。

有人能解决吗?

对于matplotlib专家来说,我不认为这很难,但对于我这个初学者来说确实很难。


重要的是要指定您想要一个水平缩放的图形版本,而不是两个方向都缩放。 - David Z
1个回答

3

读者注意:由于问题的澄清,答案已经从v1版本大幅更改。

  1. 我想要一个放大图表的版本。换句话说,一次只显示某个时间范围(例如2~3小时)内的部分数据点。然后,相邻点之间应有足够的空间。

在matplotlib中,缩放是通过轴的x和y限制实现的。因此,您可以简单地更改对ax.set_xlim的调用的参数,使相应的时间相差2-3小时或任何您想要的时间长度。知道您每5分钟有一个样本,因为2小时/(5分钟/样本)= 24,所以您可以使用:

ax.set_xlim(ts.index.min(),ts.index.min() + 24)

为了获得2小时的范围,请使用以下方法。

  1. 我想将图形保存为PNG或PDF文件。然后,如果我打开文件,图像(或PDF)查看器会有一个水平滚动条,使我可以浏览整个图形。

使用savefig将图形保存到文件中。请注意,如果您使用set_xlimxlim或等价物设置了轴限制,则仅保存在给定限制内可见的图形部分。因此,要保存整个图形(所有数据点都可见),您需要将轴限制分别设置为最小值和最大值。

当您在查看器中打开图像/PDF文件时,它是否显示滚动条(以及显示多少图形)完全取决于查看器。您无法在Python中控制此项功能。但是,通过在水平方向上使图形非常大,您可以让它有一些出现水平滚动条的机会。为此,创建图形时可以传递figsize =(width,height)关键字参数,或在现有的Figure对象上使用set_size_inches(width,height)方法。在两种情况下,测量单位均为英寸。传递一个width值,该值比height大得多,您将获得一个非常宽的图形;例如,宽度为40,高度为4。您必须尝试这些值,以找到使您的图形具有所需比例的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接