问题描述
我有多个holoviews.Curve对象的hv.NdOverlay图。曲线对象属于一个组(在本例中为“ A”组或“ B”组)。如何设置hv.NdOverlay图以显示显示两组的图例?
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'))
我想要得到的是一个图例,该图例有2个条目,一个条目显示一条红线,后跟字母“ A”,另一条条目显示绿线,后跟字母“ B”。
它看起来像holoviews。NdOverlay正在从curves_dict
的键中提取图例的信息。但是密钥必须唯一。因此,这似乎不适用于我想要的情节。是否有其他方法可以设置holoviews.NdOverlay,以便获得上述的图例?
解决方法
这是您想要的结果吗?
这是我用来创建它的代码:
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()
。