Hello, I found another problem today. I hope to get your guidance.
line1_min and line1_max in update_input1_data() are not updated to Custom_label_line. So line1_min and line1_max in code is always an empty list.
global source_line1
source_line1 = ColumnDataSource(data=dict(x=[0]))
line1_min = []
line1_max = []
def update_input1_data(attrname, old, new):
x1 = np.linspace(0,slt_strc_DF1.shape[0]-1, slt_strc_DF1.shape[0])
nums = list(slt_strc_DF1.keys())
nums_str1 = [str(x) for x in nums]
source_line1 = ColumnDataSource(data=dict(x=x1))
for i, num in enumerate(nums_str1):
source_line1.add(slt_strc_DF1[i], num)
p_line1.line('x', num, line_color="navy",line_width=1, source=source_line1)
global line1_min
global line1_max
line1_min = source_line1.data[nums_str1[0]].min()
line1_max = source_line1.data[nums_str1[-1]].max()
select_strce_1.on_change('value', update_input1_data)
Custom_label_line = CustomAction(action_tooltip=" label_line ",icon="vertical.png",
callback=CustomJS(
args=dict(
line1_min = line1_min,
line1_max = line1_max,
source_table1 = source_table1,
source_toline1 = source_toline1),
code="""
x_line1 = source_table1.data["x"];
len_x_line = x_line1.length;
var x_lines_2 = new Array();
for(var i=0;i<len_x_line;i++){
x_lines_2[i] = new Array();
x_lines_2[i][0] = x_lines[i];
x_lines_2[i][1] = x_lines[i];
}
var y_lines1 = new Array();
for(var i=0;i<len_x_line;i++){
y_lines1[i] = new Array();
y_lines1[i][0] = line1_min;
y_lines1[i][1] = line1_max;
}
source_toline1.data['x'] = x_lines_2;
source_toline1.data['y'] = y_lines1;
source_toline1.change.emit();
"""))
p_line1.add_tools(Custom_label_line)