Как уже упоминалось в этой проблеме , но еще не в документах, VLine
и 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
, так и Spikes
.Шип не будет виден, за исключением того, что он внесет запись в легенду.Vline будет на вершине шипа, и Vlines уже настраиваются, чтобы заполнить всю высоту фигуры.Это требует создания дополнительного элемента, но это более надежно, потому что вы можете наложить произведение этого шипа и vline на любые другие элементы и все же получить линию, которая заполняет высоту графика и появляется в легенде.Поскольку запись легенды основана на пике, она будет выглядеть как vline только в том случае, если вы убедитесь, что они имеют одинаковый внешний вид (например, vline и spike имеют одинаковый цвет).
# 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
, будем надеяться, масштабируется до полной высоты, если явно не задана высота, и тогда эти обходные пути не понадобятся.