作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 holoviews
中绘制一条垂直线与 bokeh
后端有一个标签显示在我的图例中。我需要这条线是情节的全高,无论它是单独的还是与其他元素重叠。我怎样才能做到这一点?
例子
我在示例中添加了一个曲线图,否则即使是可以出现在图例中的元素也只是使用它们的标签作为标题。
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)")
vline = hv.VLine(0.5, label="vline")
curve * vline
最佳答案
如 this issue 中所述但尚未在文档中,VLine
和 HLine
不要出现在图例中,并且没有计划添加对它们的支持(基本上,在 bokeh
中,它们的创建方式不同,因此将它们放入图例中并不容易)。一个可以用Spikes
反而。但是,如 another issue 中所述,尖峰不能很好地叠加。特别是,如果没有给出明确的高度,他们不会将高度调整为图的完整高度。这是我想出的两种解决方法。
解决方法 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
VLine
和一个
Spikes
.尖峰将不可见,只是它会为图例提供一个条目。 vline 将位于尖峰的顶部,并且 vlines 已经调整自身以填充图形的整个高度。这需要创建一个额外的元素,但它更健壮,因为您可以将这个尖峰和 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
当没有明确给出高度时,希望将自己缩放为全高,然后就不需要这些变通方法了。
关于python - 如何在holoviews + bokeh中获得带有图例标签的全高垂直线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050557/
我是一名优秀的程序员,十分优秀!