如何用hvplot或Holoviews在Python中复现堆叠面积图?
问题:用hvplot/Holoviews复现集群-小时功率堆叠面积图
需求概述
需要生成11个集群的时序堆叠面积图,每个集群对应24小时的功率输出,按不同Tech类别堆叠展示。数据包含Cluster(11个集群)、Hr(0-23小时)、Tech、Power字段。
已尝试的代码及问题
堆叠面积图代码
dfCP_CCS.hvplot.area(x='Hr', y='Power', groupby=['Cluster', 'Tech'], stacked=True)
问题:生成的子图仅展示单个Tech的面积,无法实现同集群下多Tech的堆叠效果,不符合目标图表形态。
柱状图代码
dfCP_CCS.hvplot(kind='bar', x='Cluster', y='Power', by='Tech')
问题:生成的是按Cluster分组的Tech功率对比柱状图,并非目标的时序堆叠面积图。
解决建议
方案1:分面展示所有集群的堆叠面积图
通过分面操作,每个子图对应一个集群,展示该集群24小时内各Tech的功率堆叠:
import holoviews as hv hv.extension('bokeh') # 确保数据无重复的Cluster-Hr-Tech组合(如有重复先聚合) # dfCP_CCS = dfCP_CCS.groupby(['Cluster','Hr','Tech'])['Power'].sum().reset_index() dfCP_CCS.hvplot.area( x='Hr', y='Power', by='Tech', stacked=True, width=300, height=200 ).facet( row='Cluster', sharex=True, sharey=True ).opts( hv.opts.Area(alpha=0.7), hv.opts.Layout(merge_tools=False) )
方案2:交互式切换集群查看堆叠面积图
保留单个画布,通过下拉菜单切换不同集群,查看对应24小时的堆叠面积:
dfCP_CCS.hvplot.area( x='Hr', y='Power', groupby='Cluster', by='Tech', # by参数控制堆叠的类别 stacked=True, width=600, height=400 ).opts( hv.opts.Area(alpha=0.7) )
关键注意点
- 原代码错误在于同时对
Cluster和Tech做groupby,导致每个子图仅显示单一Tech的面积,无法堆叠;by参数才是指定堆叠类别的正确方式。 - 若数据存在重复的
Cluster-Hr-Tech记录,需先对Power进行聚合(求和/均值等),避免绘图时数据异常。
内容的提问来源于stack exchange,提问作者Rico
相关产品推荐
相关产品推荐

