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

时间:2015-11-25 06:09:47

标签: python matplotlib time-series visualization scatter-plot

我每5分钟收集一次传感器数据一个月(30天)。 这意味着,我有一个时间序列数据,总共有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)查看器有一个水平滚动条,这使我能够探索整个图形。

  3. 有没有人可以解决它?

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

1 个答案:

答案 0 :(得分:3)

读者注意:由于问题的澄清,答案从v1发生了显着变化

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

使用轴的x和y限制实现matplotlib的缩放。因此,您只需将参数更改为ax.set_xlim,这样相应的时间就会相差2-3小时或者您想要的时间长。知道你每5分钟就有一个样品,因为2小时/(5分钟/样品)= 24,你可以使用

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

获得2小时的范围。

  
      
  1. 我希望将数字保存为png或pdf文件。然后,如果我打开文件,图像(或pdf)查看器有一个水平滚动条,这使我能够探索整个图形。
  2.   

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

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