导出动画散景图作为GIF

问题描述 投票:0回答:1

我一直在研究如何使用Bokeh库为我正在进行的一些小项目创建动画数据可视化。我觉得gif格式是导出这些可视化的最佳文件格式。它被广泛使用,它们应该很容易分享。

是否可以(并且建议)以gif格式导出散景动画图?

如果是这样,我是否需要使用任何其他工具来执行此操作?

如果没有,是否有更适合这种情况的不同文件格式?

我发现这个线程有关在Python中创建gif的潜在选项,但我不确定它们是否与Bokeh库相关。 Programmatically generate video or animated GIF in Python?

任何帮助将非常感激。非常感谢。

python data-visualization bokeh animated-gif
1个回答
1
投票

Bokeh图有一个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。所以首先你需要安装nodejsnpm,然后像这样安装phantomjs

sudo npm install -g phantomjs-prebuilt

如果您正在使用Mac,那么另一种选择是使用QuickTime Player屏幕录制制作电影,然后使用FFMPEG将其转换为动画gif,如this post中所述

© www.soinside.com 2019 - 2024. All rights reserved.