Holoviews:传播和曲线叠加的格式图例和颜色

Holoviews: Format legend and colors of Spread and Curve Overlay

给定一个包含 4 列或更多列的整洁 Pandas 列,我想要一个非常简单的图:其中两列应该是单个图形的 x-y 轴,其中一列应该索引一个Overlay 个基于 x-y 列的 N Curve 个对象,以及 N Spread 个对象,使用最后一列作为错误。因此,如果 N=4,则应该有 4 条曲线和 4 条价差。具有相同指数的曲线和点差应该是相同的颜色,图例应该证明这一点。

使用 table.to(hv.Curve,'col1','col2') 我可以获得曲线的全息图,并且通过一些努力我可以为传播做同样的事情。如果我然后调用 .overlay() 我会得到一个很好的曲线图,包括一个图例,但是当我对传播做同样的事情时,图例消失了。如果我叠加两者,图例同样消失 并且 颜色循环停止工作,使所有曲线和传播相同的颜色。如果我创建 curve*spread 个对象的全息图,那么颜色匹配但图例仍然消失。

这似乎是一个非常标准的情节,但我在 Holoviews 文档中找不到关于配对不同元素或控制图例的内容。

如果没有任何具体代码,这有点难以回答,例如我无法重现您描述的一些问题。然而,第一个问题只是默认情况下 Spread 元素未启用 show_legend。在使用 .to.overlay 绘制曲线和传播的情况下,我可以确认以下是有效的:

%%opts Spread [show_legend=True width=600] Overlay [legend_position='right']
df = pd.DataFrame({
    'index': np.arange(100), 'y': np.random.randn(100).cumsum(),
    'err': np.random.rand(100)+0.1, 'z': np.repeat(np.arange(10), 10)
})
ds = hv.Dataset(df)
ds.to(hv.Curve, 'index', 'y', 'z').overlay() * ds.to(hv.Spread, 'index', ['y', 'err']).overlay()

If I create a Holomap of curve*spread objects, then the colors match but the legend is still gone.

这确实是当前的一个限制,因为我们过去建议不要以这种方式嵌套对象,但是我刚刚打开 this PR 也将允许这种方法。