I am trying to have a hover option on the vertical red line to show the y-values of the plot. When I try to include hover in “opts” on the line_plot, I get no plot for some reason. The interaction ideally is that you select options from the cross selector–> choose a color–> a plot is populated.
import hvplot.pandas
import numpy as np
import pandas as pd
import panel as pn
from bokeh.models import HoverTool
pn.extension(sizing_mode="stretch_width")
data1 = pd.DataFrame(
{"C": np.random.randint(low=1, high=100, size=10), "D": np.random.normal(0.0, 1.0, size=10)}
)
data2 = pd.DataFrame(
{"C": np.random.randint(low=1, high=300, size=10), "D": np.random.normal(0.0, 1.0, size=10)}
)
trace_datasets = {"data_id1": data1, "dataid2": data2}
cols_X = list(data1.columns)
cols_Y = list(data1.columns)
widget_x = pn.widgets.Select(name="x", options=cols_X)
cross_selector = pn.widgets.CrossSelector(name="y", options=cols_Y)
plot_type = pn.widgets.Select(name="Plot Type", value="line", options=["line", "scatter"])
dataset_selector = pn.widgets.Select(name="Select Run Data", options=list(trace_datasets.keys()))
frame_slider = pn.widgets.IntSlider(name="Time", value=0, start=0, end=999)
@pn.depends(widget_x, cross_selector, plot_type, dataset_selector)
def get_plot_analyze(cols_X, cols_Y, plot_type="line", dataset_selector=dataset_selector.value):
container2 = pn.Column()
for selections in cross_selector.value:
if plot_type == "line":
if cols_Y:
hover = hover = HoverTool(tooltips=[selections
])
line_plot = container2.append(
trace_datasets[dataset_selector].hvplot.line(x=cols_X, y=selections, grid=True)*hv.VLine(frame_slider).opts(color="red", tools=[hover])
)
else:
line_plot = container2.append(hv.Curve([]))
elif plot_type == "scatter":
scatter_plot = container2.append(
trace_datasets[dataset_selector].hvplot.scatter(x=cols_X, y=selections, grid=True)
)
if len(container2)>0:
return container2
return "No options selected"
pn.Column(
pn.WidgetBox(
"Controls",
dataset_selector,
widget_x,
cross_selector,
plot_type,
overlay_widget,
color_pick,
frame_slider,
width=1000,
),
get_plot_analyze,
).servable()