【问题标题】:Plotting for a large number of time series data points using matplotlib使用 matplotlib 绘制大量时间序列数据点
【发布时间】:2016-02-27 19:59:39
【问题描述】:

我在一个月(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 观察值的随机时间序列数据,并尝试将其绘制在散点图中。但是,如您所见,无法分析该数字。

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

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

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

有谁可以解决吗?

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

【问题讨论】:

  • 重要的是要指定您想要一个水平放大版本的图,而不是双向放大。

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


【解决方案1】:

读者注意:由于问题的澄清,答案与 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) method。两种情况下的测量值均以英寸为单位。为width 传递一个比height 大得多的值,你会得到一个非常宽的数字;例如,40 表示宽度,4 表示高度。您必须尝试使用​​这些值来找出哪些值可以使您的身材达到您想要的比例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多