HoloViews - NdOverlay - 图例
HoloViews - NdOverlay - Legend
我有多个 holoviews.Curve 对象的 hv.NdOverlay 图。 Curve 对象属于一个组(在本例中为组 '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, 100, 0, 120, 200]
x_end = [220, 340, 280, 120, 290, 400]
date = [datetime(2020, 2, 10, 0, 0, 0), datetime(2018, 5, 22, 0, 0, 0),
datetime(2012, 7, 8, 0, 0, 0), datetime(1999, 12, 28, 0, 0, 0),
datetime(2004, 3, 21, 0, 0, 0), datetime(1992, 11, 23, 0, 0, 0)]
group = ['A', 'A', 'B', 'A', 'A', '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, 100, 0, 120, 200]
x_end = [220, 340, 280, 120, 290, 400]
date = [datetime(2020, 2, 10, 0, 0, 0), datetime(2018, 5, 22, 0, 0, 0),
datetime(2012, 7, 8, 0, 0, 0), datetime(1999, 12, 28, 0, 0, 0),
datetime(2004, 3, 21, 0, 0, 0), datetime(1992, 11, 23, 0, 0, 0)]
group = ['A', 'A', 'B', 'A', 'A', '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'))
您的方法有两点不同。我使用了 hv.Curve()
的 label
参数,我不再使用 NdOverlay
。
我有多个 holoviews.Curve 对象的 hv.NdOverlay 图。 Curve 对象属于一个组(在本例中为组 '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, 100, 0, 120, 200]
x_end = [220, 340, 280, 120, 290, 400]
date = [datetime(2020, 2, 10, 0, 0, 0), datetime(2018, 5, 22, 0, 0, 0),
datetime(2012, 7, 8, 0, 0, 0), datetime(1999, 12, 28, 0, 0, 0),
datetime(2004, 3, 21, 0, 0, 0), datetime(1992, 11, 23, 0, 0, 0)]
group = ['A', 'A', 'B', 'A', 'A', '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, 100, 0, 120, 200]
x_end = [220, 340, 280, 120, 290, 400]
date = [datetime(2020, 2, 10, 0, 0, 0), datetime(2018, 5, 22, 0, 0, 0),
datetime(2012, 7, 8, 0, 0, 0), datetime(1999, 12, 28, 0, 0, 0),
datetime(2004, 3, 21, 0, 0, 0), datetime(1992, 11, 23, 0, 0, 0)]
group = ['A', 'A', 'B', 'A', 'A', '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'))
您的方法有两点不同。我使用了 hv.Curve()
的 label
参数,我不再使用 NdOverlay
。