教程:从绘图中自动导出矢量图形(PDF)

时间:2017-12-01 14:07:11

标签: python plot phantomjs plotly vector-graphics

最近我想知道是否有可能从剧情中自动导出情节。不幸的是,plotly的文档是一个笑话,模块希望你支付一个基本的功能。在免费版本中,只能以非矢量格式(png)自动导出。在这里,我想提出一个依赖于phantomjs的解决方法。

1 个答案:

答案 0 :(得分:1)

第1步:生成html文件

import plotly.offline as py
import plotly.graph_objs as go

data = go.Scatter(x=[i for i in range(10)],
                  y=[i**2 for i in range(10)],
                  mode='lines')
layout = go.Layout(title="First Plot",
                   xaxis={'title':'x - axis'},
                   yaxis={'title':'y - axis'})
fig = dict(data=[data], layout=layout)

py.plot(fig,
        filename='temp.html',
        include_plotlyjs=True,
        output_type='file'
       )

注意:这包括很多部分的plotly.js到html文件中。仅此一项就占用了大约2 MB。如果需要,请将include_plotlyjs更改为False并在html文件中引用plotly.js:

<script src="path/to/plotly.js"></script>

第2步:PhantomJS的脚本

为phantomjs编写一个javascript文件,用于导出PDF文件:

var page = require('webpage').create();
var system = require('system');
var args = system.args;

page.viewportSize = { width: args[3], height: args[4] };
page.clipRect = { top: 0, left: 0, width: args[3], height: args[4] };

page.open(args[1], function() {
  page.render(args[2]);
  phantom.exit();
});

这需要4个参数:html文件的路径,输出文件路径,输出文件的宽度和高度。

步骤3:从python

调用PhantomJS脚本
import subprocess

xSize = 1280
ySize = 1024
subprocess.check_output(
    ['phantomjs', 'phantom_html_to_PDF.js', 'temp.html', out_path, str(x_Size), str(y_Size)])

#remove temporary html file
subprocess.check_output(['rm', 'temp.html])

这会调用phantomjs并作为参数传递从上面开始的javascript路径,html文件的路径,输出文件路径以及宽度和高度

我希望这对某人有用