HoloViews-NdOverlay-图例

问题描述

我有多个holoviews.Curve对象的hv.NdOverlay图。曲线对象属于一个组(在本例中为“ A”组或“ B”组)。如何设置hv.NdOverlay图以显示显示两组的图例?

代码示例(holoviews版本:1.13.4):

import holoviews as hv
import numpy as np
from datetime import datetime
from holoviews import opts

hv.extension('bokeh')

x_start = [0,100,120,200]
x_end = [220,340,280,290,400]
date = [datetime(2020,2,10,0),datetime(2018,5,22,datetime(2012,7,8,datetime(1999,12,28,datetime(2004,3,21,datetime(1992,11,23,0)]
group = ['A','A','B','B']

curves_dict = dict()
for key in range(len(x_start)):
    curves_dict[key] = hv.Curve(((x_start[key],x_end[key]),(np.datetime64(date[key]),np.datetime64(date[key]))),'X','Year',group=group[key])

curves_ndoverlay_all = hv.NdOverlay(curves_dict)
curves_ndoverlay_all.opts(
    opts.NdOverlay(show_grid=True,height=300,responsive=True,align='center'),opts.Curve('A',color='red'),opts.Curve('B',color='green'))

我得到的是:

Line plo,2 groups

我想要得到的是一个图例,该图例有2个条目,一个条目显示一条红线,后跟字母“ A”,另一条条目显示绿线,后跟字母“ B”。 它看起来像holoviews。NdOverlay正在从curves_dict的键中提取图例的信息。但是密钥必须唯一。因此,这似乎不适用于我想要的情节。是否有其他方法可以设置holoviews.NdOverlay,以便获得上述的图例?

解决方法

这是您想要的结果吗?

Legend with two items

这是我用来创建它的代码:

import holoviews as hv
import numpy as np
from datetime import datetime
from holoviews import opts

hv.extension('bokeh')

x_start = [0,100,120,200]
x_end = [220,340,280,290,400]
date = [datetime(2020,2,10,0),datetime(2018,5,22,datetime(2012,7,8,datetime(1999,12,28,datetime(2004,3,21,datetime(1992,11,23,0)]
group = ['A','A','B','B']

def fig(key):
    return hv.Curve(((x_start[key],x_end[key]),(np.datetime64(date[key]),np.datetime64(date[key]))),'X','Year',group=group[key],label=group[key]
        )

for i in range(len(group)):
    if i == 0:
        f = fig(i)
    else:
        f *= fig(i)
        
f.opts(opts.Curve(show_grid=True,height=300,responsive=True,align='center'),opts.Curve('A',color='red'),opts.Curve('B',color='green'))

您的方法有两点不同。我使用了label的{​​{1}}参数,现在不再使用hv.Curve()