You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas Resample处理后的时序数据绘制K线图

如何基于Pandas Resample处理后的时序数据绘制K线图

你遇到的问题其实很常见——当你用resample把高频时序数据聚合成天级别的OHLC(开盘/最高/最低/收盘)数据后,只需要把这些聚合结果规整到一个标准的DataFrame里,再调整好索引,就能复用你原来的K线绘图逻辑啦!

我给你整理了完整的步骤和代码,一步步来:

1. 一次性聚合出完整的OHLC数据

不要分开调用resampler.first()、resampler.last()这些方法,用Pandas的agg()可以一次性把四个指标聚合到一个DataFrame里,结构更清晰,代码也更简洁:

import pandas as pd
from datetime import datetime
from bokeh.plotting import figure, show

# 你的原始高频数据
data = {
    'time': [
        datetime(2025, 1, 1, 6),
        datetime(2025, 1, 1, 10),
        datetime(2025, 1, 1, 14),
        datetime(2025, 1, 1, 18),
        
        datetime(2025, 1, 2, 6),
        datetime(2025, 1, 2, 10),
        datetime(2025, 1, 2, 14),
        datetime(2025, 1, 2, 18),

        datetime(2025, 1, 3, 6),
        datetime(2025, 1, 3, 10),
        datetime(2025, 1, 3, 14),
        datetime(2025, 1, 3, 18),
        
    ],
    'price': [
        10,  5, 40, 40,
        40, 10, 50, 20,
        20, 20, 35, 30,
    ]
}

df = pd.DataFrame(data)

# 天级别聚合,一次性得到open/high/low/close
ohlc_df = df.resample('D', on='time', kind='period').agg(
    open=('price', 'first'),   # 当天第一个价格是开盘价
    high=('price', 'max'),     # 当天最高价
    low=('price', 'min'),      # 当天最低价
    close=('price', 'last')    # 当天最后一个价格是收盘价
)

2. 调整索引适配绘图

因为你用了kind='period',所以ohlc_df的索引是Period类型(比如2025-01-01这种周期对象)。虽然Bokeh能直接处理,但转成Timestamp类型(具体的时间戳)会让x轴的日期显示更直观:

# 将Period索引转为Timestamp
ohlc_df.index = ohlc_df.index.to_timestamp()

如果你想保留Period索引也完全没问题,直接用ohlc_df.index即可,Bokeh会自动适配。

3. 复用K线绘图逻辑

这一步就和你之前的代码几乎一样了,只是把数据源换成规整后的ohlc_df,索引直接用ohlc_df.index就行:

# 判断涨跌:收盘价>开盘价为涨,反之则跌
inc = ohlc_df.close > ohlc_df.open
dec = ohlc_df.open > ohlc_df.close

# 创建绘图对象,指定x轴为时间类型
p = figure(x_axis_type='datetime', title="天级K线图", width=800, height=400)

# 绘制高低点连线(K线的上影线和下影线)
p.segment(ohlc_df.index, ohlc_df.high, ohlc_df.index, ohlc_df.low, color="black")

# 绘制下跌K线(红色实体)
p.vbar(ohlc_df.index[dec], 0.6, ohlc_df.open[dec], ohlc_df.close[dec], color="#eb3c40")

# 绘制上涨K线(白色实体+蓝色边框)
p.vbar(ohlc_df.index[inc], 0.6, ohlc_df.open[inc], ohlc_df.close[inc], fill_color="white",
       line_color="#49a3a3", line_width=2)

# 加上轴标签,让图表更清晰
p.xaxis.axis_label = "日期"
p.yaxis.axis_label = "价格"

# 显示图表
show(p)

这样运行后,你得到的K线图会和你最开始用手动定义的OHLC数据画的效果完全一致!

备注:内容来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:08:04