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

如何使用Holoviews按Id绘制多折线图?(X轴Order,Y轴Cumulative)

解决Holoviews绘制同色多Id折线图的问题

没问题,我来帮你搞定这个需求!要实现每个Id对应一条折线、所有折线同色,且X轴为Order、Y轴为Cumulative的效果,我们可以通过分组创建Curve再统一设置样式来实现,下面是完整的解决方案:

步骤1:准备环境与模拟数据

首先确保你已经导入了必要的库,我先模拟一个和你结构一致的DataFrame方便你对照:

import pandas as pd
import holoviews as hv
hv.extension('bokeh')  # 启用Bokeh渲染后端,也可以用matplotlib

# 模拟你的数据结构(替换成你自己的DataFrame即可)
df = pd.DataFrame({
    'Id': ['X1', 'X1', 'X1', 'X2', 'X2', 'X3', 'X3', 'X3'],
    'Order': [1, 2, 3, 1, 2, 1, 2, 3],
    'Cumulative': [5, 12, 20, 8, 18, 3, 10, 17]
})

步骤2:生成同色多折线图

这里有两种简洁的实现方式,选一种你觉得顺手的就行:

方式一:分组后叠加Curve

# 按Id分组,为每个分组创建独立的Curve
grouped_curves = df.groupby('Id').apply(lambda group: hv.Curve(group, 'Order', 'Cumulative'))

# 将所有Curve叠加,并设置统一颜色与图表样式
final_plot = hv.Overlay(grouped_curves).opts(
    hv.opts.Curve(color='#2ca02c', line_width=2),  # 这里指定统一颜色,比如绿色
    hv.opts.Overlay(
        title='Cumulative Trend by Order (Per Id)',
        xlabel='Order',
        ylabel='Cumulative Value',
        legend_position='right'  # 保留图例区分不同Id
    )
)

# 显示图表
final_plot

方式二:用Dataset快速生成

如果你习惯用Holoviews的Dataset对象,这种方式更简洁:

# 将DataFrame转为Holoviews Dataset,指定维度
data_set = hv.Dataset(df, kdims=['Id', 'Order'], vdims=['Cumulative'])

# 生成折线图并设置样式
final_plot = data_set.to(hv.Curve, kdims='Order', vdims='Cumulative').opts(
    hv.opts.Curve(color='#ff7f0e', line_width=2),  # 统一设置橙色
    hv.opts.Overlay(
        title='Cumulative Trend by Order (Per Id)',
        xlabel='Order',
        ylabel='Cumulative Value'
    )
)

final_plot

关键注意点

  • 确保你的Order列是数值类型(int/float),这样X轴才会按顺序正确渲染;
  • 如果之前的代码没出效果,大概率是没有按Id分组——直接用整个DataFrame创建Curve只会生成一条汇总线,必须先分组再生成独立折线;
  • 颜色值可以用十六进制码、RGB值或者颜色名称(比如'blue'),按需替换即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:48:00