2015-11-25 153 views
4

我已经每隔5分钟收集一次传感器数据一个月(30天)。这意味着,我的时间序列数据总共有288 * 30个数据点。使用matplotlib绘制大量时间序列数据点

我想分散绘制数据(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专家来说不难,但对我来说,这对初学者来说很难。

+0

指定您需要_horizo​​ntally_放大图的放大版本非常重要,而不是双向缩放。 –

回答

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小时的范围内。

  • 我想保存数字作为PNG或pdf文件。然后,如果我打开文件,图像(或pdf)查看器有一个水平滚动条,它使我能够浏览整个图形。
  • 使用savefig将图保存到文件。请注意,如果您使用set_xlimxlim或同等设置了轴限制,则只会保存在给定范围内可见的图形部分。因此,为了保存整个图形(所有数据点均可见),您需要分别将轴限制设置为最小值和最大值。

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