当前位置: 首页 > news >正文

Python绘制时间序列直方图

这个示例演示了如何高效地可视化大量时间序列,从而可能揭示出隐藏的子结构和模式,这些模式并不立即显现出来,并以视觉上吸引人的方式展示它们。在这个示例中,我们生成了多个正弦“信号”序列,这些序列被埋藏在更多的随机游走“噪声/背景”序列之下。对于标准差为σ的无偏高斯随机游走,经过n步后离原点的均方根偏差为σ*sqrt(n)。因此,为了在与随机游走相同的尺度上保持正弦波可见,我们按随机游走的均方根缩放幅度。此外,我们还引入了一个小的随机偏移phi,以将正弦波左右移动,以及一些附加的随机噪声,以将单个数据点上下偏移,使信号更“真实”(你不会期望在数据中出现完美的正弦波)。

第一个图展示了通过使用 plt.plot 并设置较小的 alpha 值,将多个时间序列叠加在一起的典型可视化方法。第二个和第三个图展示了如何通过使用 np.histogram2d 和 plt.pcolormesh 将数据重新解释为二维直方图,并在数据点之间可选择地进行插值。

import time

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=3, figsize=(6, 8), layout='constrained')

# 固定随机状态以确保可重复性
np.random.seed(19680801)
#生成一些数据;一维随机游走,小部分正弦波

num_series = 1000
num_points = 100
SNR = 0.10 # 信噪比
x = np.linspace(0, 4 * np.pi, num_points)
# 生成无偏高斯随机游走
Y = np.cumsum(np.random.randn(num_series, num_points), axis=-1)
#
num_signal = round(SNR * num_series)
phi = (np.pi / 8) * np.random.randn(num_signal, 1) # small random offset
Y[-num_signal:] = (
np.sqrt(np.arange(num_points)) # random walk RMS scaling factor
* (np.sin(x - phi)
+ 0.05 * np.random.randn(num_signal, num_points)) # small random noise
)


# 使用 `plot` 和较小的 `alpha` 绘制系列。由于有大量重叠的系列,从这个视角很难观察到正弦行# # 为。同时,由于需要生成许多个体图形元素,运行起来也需要一些时间。
tic = time.time()
axes[0].plot(x, Y.T, color="C0", alpha=0.1)
toc = time.time()
axes[0].set_title("Line plot with alpha")
print(f"{toc-tic:.3f} sec. elapsed")


# 现在我们将把多个时间序列转换为直方图。这样不仅隐藏的信号会更加明显,而且这一过程也快# 得多。
tic = time.time()
# 在每个时间序列中的点之间进行线性插值
num_fine = 800
x_fine = np.linspace(x.min(), x.max(), num_fine)
y_fine = np.concatenate([np.interp(x_fine, x, y_row) for y_row in Y])
x_fine = np.broadcast_to(x_fine, (num_series, num_fine)).ravel()


# 在二维直方图中绘制 (x, y) 点并使用对数颜色刻度 很明显,噪声下存在某种结构
# 你可以调整 vmax 以使信号更清晰
cmap = plt.colormaps["plasma"]
cmap = cmap.with_extremes(bad=cmap(0))
h, xedges, yedges = np.histogram2d(x_fine, y_fine, bins=[400, 100])
pcm = axes[1].pcolormesh(xedges, yedges, h.T, cmap=cmap,
norm="log", vmax=1.5e2, rasterized=True)
fig.colorbar(pcm, ax=axes[1], label="# points", pad=0)
axes[1].set_title("2d histogram and log color scale")

# 相同的数据,但使用线性色彩刻度
pcm = axes[2].pcolormesh(xedges, yedges, h.T, cmap=cmap,
vmax=1.5e2, rasterized=True)
fig.colorbar(pcm, ax=axes[2], label="# points", pad=0)
axes[2].set_title("2d histogram and linear color scale")

toc = time.time()
print(f"{toc-tic:.3f} sec. elapsed")
plt.show()

参考文献:https://matplotlib.org/stable/gallery/statistics/time_series_histogram.html

http://www.jsqmd.com/news/516835/

相关文章:

  • 家庭实验室:OpenClaw+ollama-QwQ-32B实现智能家居控制
  • 用ESP32-S3和USB摄像头DIY一个低成本家庭猫眼(附完整代码和接线图)
  • Edge/Chrome/Firefox通用:DownThemAll批量下载器保姆级配置指南与避坑心得
  • Qwen3-32B-Chat百度OCR后处理:扫描文档理解+结构化信息提取+表格重建效果
  • 告别找图烦恼!用雯雯的后宫-造相Z-Image-瑜伽女孩快速生成瑜伽宣传素材
  • FlatBuffers(零拷贝序列化) ——一本不需要翻译就能直接阅读的外语书
  • MiniCPM-o-4.5-nvidia-FlagOS入门指南:零基础搭建本地多模态AI助手(Gradio 6.4)
  • 汇川H5U与Factory IO实战:如何实现物料运输的自动连续存取(附完整程序解析)
  • Xmind 8 Pro免费激活指南:详细步骤与常见问题解决
  • C 语言内存函数全解析:从 memcpy 到 memcmp 的使用与模拟实现
  • Qwen3-32B开源大模型教程:百度开发者关注的transformers模型加载最佳实践
  • Texlive新手避坑指南:如何彻底解决xelatex编译中的字体缺失问题(以AdobeSongStd-Light为例)
  • 联邦学习实战:如何用语义通信解决自动驾驶中的非IID数据问题?
  • 你以为在靠理财逆袭,其实在被“盯盘”榨干时薪
  • 2026哈尔滨考研培训公司课程费用,哪家性价比高呢 - 工业推荐榜
  • antv x6实战:基于类型校验的自定义连接桩与智能连线规则设计
  • 【LoRA实战】精准定位MoE模型Router层的target_modules配置指南
  • Python虚拟环境里pip总出问题?可能是你的包路径没配好(附完整排查流程)
  • FineReport报表设计器与服务器详解:如何高效搭建本地开发环境
  • 保姆级避坑指南:Windows/Mac双平台搞定GraphRAG 2.0.0本地部署(附Ollama模型选择建议)
  • 新书上市 | 陶哲轩强推!这可能是今年最值得读的一本数学科普书!
  • VSCode配置PyTorch开发环境:从CUDA版本检查到镜像源加速(避坑指南)
  • 2026年济宁泥层界面仪性价比排名,探讨价格、可信度及适用场景 - myqiye
  • Apache DolphinScheduler 3.1.8 从入门到精通:部署、核心功能与实战告警配置全解析
  • QGC源码编译避坑指南:从git submodule卡死到QT工程配置
  • 用Python手把手实现矩阵分解推荐算法(附完整代码与数据集)
  • 2026 NMN靠谱品牌推荐,十大热门牌子测评,安全有效才是真抗衰 - 速递信息
  • Android Banner库避坑指南:网络图片加载、内存泄漏与生命周期那些事儿
  • 大屏iframe通信避坑指南:Vue3中如何确保postMessage100%送达
  • 灵感画廊部署教程:Ubuntu 22.04 LTS + NVIDIA 535驱动 + SDXL 1.0全兼容