我有一个由Bokeh服务器(Bokeh 0.12.14)渲染的多面板Bokeh图。我正在运行带有按钮小部件(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)
有没有办法从图形上删除布局?
最佳答案
解决方法是,我发现可以将文本注释添加为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小部件和图形之间的背景是透明的(即使在html中定义了'background-color':'white'
)-我需要整个.png的白色背景。要解决此问题,请打开图像,使用PIL(Python Imaging Library)将背景编辑为白色,然后重新保存图像。这使得整个服务器端过程比我想要点击“导出图像”小部件按钮的客户端要慢得多。我将其发布为我自己的问题的答案,因为它可以解决问题,但是,如果可能的话,简单地从图形中删除Label布局会很棒!
作为参考,here是我的Web应用程序,使用此答案来实现“导出图像”按钮的功能。
关于python - 更新curdoc()后,从Bokeh图中删除Label布局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48912681/