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

如何转换JSON格式适配Ant Design折线图,实现多指标折线绘制需求

适配AntD Charts多折线图的数据转换方案

你需要做的核心是把当前宽表结构的原始数据,转换为AntD Charts要求的长表结构,以下是两种可直接落地的实现方案:


方案1:Pandas实现(推荐)

代码简洁、处理效率高,适合绝大多数场景,尤其是数据量较大的情况:

import pandas as pd

# raw_data为你从BigQuery拉取到的原始数据列表
df = pd.DataFrame(raw_data)
# 合并date和hour为统一的x轴时间字段,可按需调整时间格式
df['time'] = df.apply(lambda x: f"{x['date']} {int(float(x['hour'])):02d}:00", axis=1)

# 宽表转长表
result_df = df.melt(
    # 保留作为x轴的维度字段,需要保留原始date、hour可直接追加到数组中
    id_vars=['time'],
    # 指定要拆分为独立折线的所有指标字段
    value_vars=['predict', 'lower_80', 'upper_80', 'lower_90', 'upper_90', 'lower_95', 'upper_95'],
    var_name='category', # 对应AntD Charts要求的分类字段
    value_name='value' # 对应AntD Charts要求的数值字段
)

# 转换为JSON格式返回前端即可
formatted_json = result_df.to_dict('records')

方案2:原生Python实现

适合不想额外引入Pandas依赖、数据量较小的场景:

# 要生成独立折线的指标列表
metrics = ['predict', 'lower_80', 'upper_80', 'lower_90', 'upper_90', 'lower_95', 'upper_95']
formatted_data = []

for item in raw_data:
    # 拼接x轴时间字段,按需调整格式即可
    time_str = f"{item['date']} {int(float(item['hour'])):02d}:00"
    # 遍历每个指标生成对应条目
    for metric in metrics:
        formatted_data.append({
            'time': time_str,
            'category': metric,
            'value': item[metric]
        })

前端调用说明

拿到转换后的数据直接传入AntD Charts的Line组件即可,核心配置参考:

import { Line } from '@ant-design/charts';

const config = {
  data: formattedJson, // 后端返回的转换后数据
  xField: 'time',
  yField: 'value',
  seriesField: 'category',
  // 其他样式、交互配置按需添加
};

export default () => <Line {...config} />;

内容的提问来源于stack exchange,提问作者Owenn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:08