正如中提到的这个问题但文档中还没有,VLine
and HLine
不会出现在图例中,并且没有计划添加对它们的支持(基本上,在bokeh
它们的创建方式不同,因此没有简单的方法将它们放入图例中)。一个可以用Spikes
反而。然而,正如记录在另一个问题,尖峰不能很好地重叠。特别是,如果没有给出明确的高度,它们不会将其高度调整为绘图的完整高度。这是我想出的两个解决方法。
解决方法1
您可以明确地找出垂直线应覆盖的其他元素的高度,并使用它来创建适当高度的尖峰。这是可行的,但它相当脆弱,因为您需要充分了解可能被尖峰覆盖的所有内容来适应它。
import numpy as np
import holoviews as hv
hv.extension("bokeh")
x = np.linspace(0, 1)
curve = hv.Curve((x, np.sin(x)), label="sin(x)")
height = curve.data["y"].max() - curve.data["y"].min()
spikes = hv.Spikes(([0.5], [height]), vdims="height", label="mid")
spikes * curve
解决方法2
这同时使用了VLine
and a Spikes
。尖峰将不可见,除非它会为图例提供一个条目。 vline 将位于尖峰的顶部,并且 vline 已自行调整以填充图形的整个高度。这需要创建一个额外的元素,但它更强大,因为您可以将这个尖峰和 vline 的乘积与任何其他元素叠加,并且仍然得到一条填充绘图高度并出现在图例中的线。不过,由于图例条目是基于尖峰的,因此只有在确保它们具有相似的外观(例如 vline 和尖峰具有相同的颜色)时,它才会看起来像 vline。
# need to make sure the colors are the same for spikes/vlines
# would look a bit better if I adjusted the spike thickness too
spikes = hv.Spikes([0.5], label="mid").opts(color="black")
vline = hv.VLine(0.5).opts(color="black")
spikes * curve * vline
将来,Spikes
当没有明确给出高度时,希望将自身缩放为全高,然后就不需要这些解决方法了。