【问题标题】:Plot every n series of a vector until end of data | python绘制向量的每 n 个序列,直到数据结束 | Python
【发布时间】:2020-10-11 18:44:21
【问题描述】:

我找到了许多示例来绘制向量的每 n 个元素,但我找不到绘制向量的每 n 个元素(复数)。我的初始向量的 xaxis 从 1 到 15768000,即 5 年以秒为单位,而 yaxis 是测量值。向量的长度为 15768000。我需要每 24 小时或在本例中每 86400 个值(以秒为单位的 24 小时)绘制一次数据。

例如:

list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

如何从头开始绘制每 3 个元素 1、2、3 和 4、5、6,从头开始绘制 7、8、9。

我的情况下的新 xaxis 应该从 1 到 86400。如何修改要从头到尾的每 86400 个值绘制的向量的值?对于我的情况,我将在情节上有 1825 个场景(5 年内每 86400 个向量)。下图显示了我想要实现的目标(在此示例中,每 15 小时绘制一次)。

【问题讨论】:

  • 你有 numpy 数组 pd.Series 列表吗?
  • @ansev 我在列表中有测量值

标签: python pandas list dataframe matplotlib


【解决方案1】:

更新答案:

我相信你只需要在绘图之前重塑你的数据......

days = 20
pts = 86400
m = np.random.rand(pts*days)-0.5

m = np.reshape(m,(pts,days))

m = 1+np.cumsum(m,axis=0)
plt.plot(m)

旧答案:

下采样、下采样有多种方式。最简单的方法是为每个第 x 个元素绘制数据点,我相信这是您想要的“需要每 24 小时或在这种情况下每 86400 个值绘制数据”。为此,您只需绘制每个第 x 个数据点,示例代码如下所示。

示例 1. 不使用 pandas。

# import 
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
# generate random data
m = np.random.rand(10000,10)-0.5
m = 1+np.cumsum(m,axis=0)

# plot every x-th element
skip = 1000 # every 1000!
for x in range(10):
    plt.scatter(np.arange(0,10000,skip),m[::skip,x])
plt.plot(m,alpha=0.5)
plt.grid(True)

示例 2. 使用 Pandas(我的偏好)。

import pandas as pd
import datetime

# form dataframe object
df = pd.DataFrame(m)
# add hypothetical time
base = datetime.datetime.today()
date_list = [base + datetime.timedelta(days=x) for x in range(10000)]
df.index = date_list
#plot data with and without skipping
df.iloc[::skip,].plot()

df.plot()

【讨论】:

  • 感谢@teng 的回答,虽然我无法实现我所需要的。在我的场景中,我需要从头到尾绘制每 86400 个值,这将代表一天和一条线。第一天是 0 到 86400,一条线。此外,第二行(或第二天)将再次从 x 轴的开头开始,但继续向量,即从 86400 到 172000(86400+86400 或第二天),第三行从 172000 到 172000+86400(第三天) .我的数据范围是 15768000,但我需要 x 轴 86400,而不是 15768000...
  • 我看到@robmiller505 我认为你只需要在绘图之前重塑你的数据。查看我更新的答案。
  • 感谢@teng。在阅读了我的数据并应用您的方法m = np.reshape(m,(pts,years)) 之后,多年来我放置了 365*5(天*年),我得到了以下问题:无法将大小为 157680001 的数组重塑为形状(86400,1825)。我的数据有形状 (157680001,1) 。任何想法如何解决这个问题?
  • @robmiller505 86400*1825=157680000,您的原始数据多了一个数据点!找到一个额外的点并摆脱它。 m = np.reshape(m[1:],(pts,years)).
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多