繁体   English   中英

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

[英]Plotting for a large number of time series data points using matplotlib

我每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个观测值的随机时间序列数据,并尝试在散点图中绘制它。 但是,正如您所看到的,分析图形是不可能的。

在此输入图像描述

我想重新绘制它满足以下条件:

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

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

有没有人可以解决它?

我不认为这对matplotlib专家来说并不难,但对我来说,初学者来说相当困难。

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

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

使用轴的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)查看器有一个水平滚动条 ,使我能够探索整个图形。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM