我有一个多面板散景图,用Bokeh服务器渲染(Bokeh 0.12.14)。我正在运行一个带有按钮小部件(on_click()
)的函数,它修改了我的gridplot
布局,添加了一些标签,并导出了一个自定义的.png图像。在函数中,我使用curdoc().hold()
后跟curdoc().clear
,对图进行修改并构建新的gridplot
。然后,我将curdoc().add_root(gridplot)
与修改后的gridplot布局一起使用,并运行export_png(curdoc())
。
导出后,我再次运行curdoc().clear()
,重建原始gridplot
版面,并使用curdoc().add_root(gridplot)
恢复原始文档。最后以curdoc().unhold()
结尾。
一切正常,但我无法弄清楚如何删除为.png导出创建的自定义标签。我正在添加几个标签,例如:
season_label = Label(x=start_display, y=35, x_units='data', y_units='data',
text= '%s - %s' % (starting_year, starting_year+1),
render_mode='css', text_font_style='bold',
text_font_size='14px', text_baseline='middle', text_align='left')
newsnow_extra_fig.add_layout(season_label)
有没有办法从图中删除布局?
答案 0 :(得分:1)
作为解决方法,我发现我可以将文字注释添加为Div widgets,而不是Labels。然后,我使用gridplot()
在预期数字的上方或下方添加小部件。例如:
div_1 = bkm.widgets.Div(text="""My text annotation {} - {}""".format(starting_year, starting_year+1),
width=1400, height=27, style={'background-color':'white'})
div_wb_1 = widgetbox(div_1)
grid = gridplot(div_wb_1,
fig_1,
fig_2,
div_wb_2,
ncols=1)
在.png导出之后,我可以通过重新定义grid
而不使用div小部件框来重建我的原始文档:
grid = gridplot(fig_1,
fig_2,
ncols=1)
但是,当我将gridplot()
(包括div)添加到curdoc()
然后export_png(curdoc())
时,div小部件和数字之间的背景是透明的(即使是定义{{ 1}}在html中) - 我需要在整个.png中使用白色背景。要解决此问题,我打开图像,使用PIL(Python Imaging Library)将背景编辑为白色,然后重新保存图像。这使得整个服务器端进程比我想要访问“导出图像”小部件按钮的客户端要慢得多。
我发布这个作为我自己的问题的答案,因为它解决了问题,但如果可能的话,从图中删除Label布局会很棒!
作为参考,here是我的网络应用程序,使用此答案获取“导出图像”按钮的功能。