我一直在研究使用Bokeh库为我正在从事的一些小项目创建动画数据可视化。我认为gif格式将是导出这些可视化效果的最佳文件格式。它被广泛使用并且应该易于共享。
是否可以(并且建议)以gif格式导出散景动画情节?
如果是这样,我是否需要使用任何其他工具来做到这一点?
如果没有,是否有其他文件格式更适合于此?
我发现了这个线程,它涉及在Python中创建gif的潜在选项,但是我不确定它们是否与Bokeh库相关。 Programmatically generate video or animated GIF in Python?
任何帮助将不胜感激。非常感谢。
答案 0 :(得分:1)
散景图具有一个SaveTool,可让您以PNG格式手动保存图面画布,但这需要您做很多工作。另外,您可以通过使用update()
函数来实现Bokeh服务器应用程序来自动执行此过程,该函数可更新绘图的data_source
属性,例如并使用export_png()
函数保存屏幕截图。然后您可以使用这些图像来制作动画,例如使用您上面提到的Python库。
这是一个与bokeh serve --show app.py
一起运行的示例脚本:
app.py
的内容:
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc
from datetime import datetime
from bokeh.io import export_png
import random
source = ColumnDataSource(dict(time = [datetime.now()], value = [random.randint(5, 10)]))
plot = figure(plot_width = 1200, x_axis_type = 'datetime', tools = 'pan,box_select,crosshair,reset,save,wheel_zoom')
plot.line(x = 'time', y = 'value', line_color = 'black', source = source)
counter = 0
def update():
global counter
new_source_data = dict(time = [datetime.now()], value = [random.randint(5, 10)])
source.stream(new_source_data)
counter = counter + 1
export_png(plot, filename = "plot_" + str(counter) + ".png")
curdoc().add_root(plot)
curdoc().add_periodic_callback(update, 1000)
要使此脚本正常工作,您需要在系统上安装phantomjs
。因此,首先您需要安装nodejs
和npm
,然后像这样安装phantomjs
:
sudo npm install -g phantomjs-prebuilt
如果您使用的是Mac,则另一种选择是使用QuickTime Player
屏幕录像来制作电影,然后使用FFMPEG
将其转换为动画gif,如this post