HoloViews 区域叠加轴和标签
HoloViews Area Overlay Axes and Labels
我试图覆盖 Scatter
和 Area
,但后者导致轴及其标签消失。
import pandas as pd
import holoviews as hv
hv.extension('bokeh')
from bokeh.models import HoverTool
data = dict(A=["A1", "A1", "A1", "A1"], B=["B1", "B1", "B1", "B2"], C=[10, -5, 23, 9], D=[0, 5, -7, 6])
df = pd.DataFrame(data=data)
df_hv = hv.Dataset(df)
hover = HoverTool(
tooltips=[("C", "@C{0,.0}"),
("D", "@D{0,.0}")]
)
scatter = df_hv.to(hv.Scatter, kdims=["C", "D"], vdims=["C", "D"], groupby=["A", "B"]).redim.label(x="A (unitA)", y="B (unitB)")
area = hv.Area([(0, 0), (10, 9), (30, 8), (25, -11), (15, -12), (0, 0)]).opts(style=dict(color="lightgrey", line_color="white", line_dash=None, alpha=0.5)).redim.label(x="A (unitA)", y="B (unitB)")
然后:
%%opts Scatter [tools=[hover]] (size=10)
scatter * area
结果如下:
如果将 hv.Area
行替换为以下内容,
area = hv.Curve([(0, 0), (10, 90), (30, 80), (25, 110), (15, 120)]).opts(style=dict(line_color="black", line_dash="dashed", alpha=0.5))
您会看到轴及其标签:
这是一个错误吗?还是我遗漏了什么?
bokeh=0.12.7
holoviews=1.8.3
pandas=0.20.2
python=3.6.1
更新
评论之一后,我改区如下,
area = hv.Area([(0, 0), (10, 9), (30, 8), (25, -11), (15, -12), (0, 0)]).opts(style=dict(color="lightgrey", line_color="white", line_dash="solid", alpha=0.5)).redim.label(x="A (unitA)", y="B (unitB)")
但是作为副作用,沿着原点有一条丑陋的线:
如果我这样做也不会好转 line_color="lightgrey"
。
更新 2
添加选项 line_alpha=0
解决了其中一条评论中建议的问题。
area = hv.Area([(0, 0), (10, 9), (30, 8), (25, -11), (15, -12), (0, 0)]).opts(style=dict(color="lightgrey", line_color="white", line_dash="solid", alpha=0.5, line_alpha=0)).redim.label(x="A (unitA)", y="B (unitB)")
我不太确定这是如何或为什么发生的(我怀疑这是 BokehJS 中的某些东西),但它似乎是 Area
元素样式选项中的 line_dash=None
,如果您将其删除或替换为 line_dash='solid'
轴 return.
我会跟进并可能会在散景中提出问题。
我试图覆盖 Scatter
和 Area
,但后者导致轴及其标签消失。
import pandas as pd
import holoviews as hv
hv.extension('bokeh')
from bokeh.models import HoverTool
data = dict(A=["A1", "A1", "A1", "A1"], B=["B1", "B1", "B1", "B2"], C=[10, -5, 23, 9], D=[0, 5, -7, 6])
df = pd.DataFrame(data=data)
df_hv = hv.Dataset(df)
hover = HoverTool(
tooltips=[("C", "@C{0,.0}"),
("D", "@D{0,.0}")]
)
scatter = df_hv.to(hv.Scatter, kdims=["C", "D"], vdims=["C", "D"], groupby=["A", "B"]).redim.label(x="A (unitA)", y="B (unitB)")
area = hv.Area([(0, 0), (10, 9), (30, 8), (25, -11), (15, -12), (0, 0)]).opts(style=dict(color="lightgrey", line_color="white", line_dash=None, alpha=0.5)).redim.label(x="A (unitA)", y="B (unitB)")
然后:
%%opts Scatter [tools=[hover]] (size=10)
scatter * area
结果如下:
如果将 hv.Area
行替换为以下内容,
area = hv.Curve([(0, 0), (10, 90), (30, 80), (25, 110), (15, 120)]).opts(style=dict(line_color="black", line_dash="dashed", alpha=0.5))
您会看到轴及其标签:
这是一个错误吗?还是我遗漏了什么?
bokeh=0.12.7
holoviews=1.8.3
pandas=0.20.2
python=3.6.1
更新
评论之一后,我改区如下,
area = hv.Area([(0, 0), (10, 9), (30, 8), (25, -11), (15, -12), (0, 0)]).opts(style=dict(color="lightgrey", line_color="white", line_dash="solid", alpha=0.5)).redim.label(x="A (unitA)", y="B (unitB)")
但是作为副作用,沿着原点有一条丑陋的线:
如果我这样做也不会好转 line_color="lightgrey"
。
更新 2
添加选项 line_alpha=0
解决了其中一条评论中建议的问题。
area = hv.Area([(0, 0), (10, 9), (30, 8), (25, -11), (15, -12), (0, 0)]).opts(style=dict(color="lightgrey", line_color="white", line_dash="solid", alpha=0.5, line_alpha=0)).redim.label(x="A (unitA)", y="B (unitB)")
我不太确定这是如何或为什么发生的(我怀疑这是 BokehJS 中的某些东西),但它似乎是 Area
元素样式选项中的 line_dash=None
,如果您将其删除或替换为 line_dash='solid'
轴 return.
我会跟进并可能会在散景中提出问题。