codecamp

pyecharts FAQ

Q: 如何离线使用 pyecharts?

A: 如果需要在不能联网的环境上使用 pyecharts,需要离线安装 pyecharts 以及提供本地静态资源 HOST 服务。

找一台可以联网的机器,执行以下步骤

# 先安装 pyecharts
$ pip install pyecharts
$ cd ~ && mkidr pyecharts-dep && cd pyecharts-dep
# 将 pyecharts 用到的所有依赖下载到 pyecharts-dep 文件夹
$ pip download pyecharts
# clone pyecharts-assets 项目
$ git clone https://github.com/pyecharts/pyecharts-assets.git
# 将 pyecharts-dep 文件夹打包,传输到需要离线使用 pyecharts 的机器里

切换到离线使用的机器,执行以下步骤

# 1.先安装 pyecharts-dep 中除 pyecharts-X.Y.Z-py2.py3-none-any.whl 的其他包
$ ls | grep -v "^pyecharts*" | xargs pip install
# 2.安装 pyecharts-X.Y.Z-py2.py3-none-any.whl 包
$ ls | grep "pyecharts*" | xargs  pip install
# 3.启动本地服务
$ cd pyecharts-assets && python -m http.server

Q: 关于 JSCode 在 Web 框架中使用前后端分离模式情况下出现解析异常

A1: 由于 json 数据类型的问题,无法将 pyecharts 中的 JSCode 类型的数据转换成 json 数据格式返回到前端页面中使用。因此在使用前后端分离的情况下尽量避免使用 JSCode 进行画图。

A2: 暂时的解决方案如下(以使用 Jquery Ajax 获取数据的情况为例):

前端部分

$.ajax({
    type: "GET",  // POST 获取其他
    url: "<后端的数据接口>",
    dataType: 'json',
    success: function (result) {
        // console.log(result);
        let jsonResult = JSON.stringify(result);
        jsonResult = JSON.parse(jsonResult, function (key, value) {
           if (value.match(/(?:\/\*[\s\S]*?\*\/|\/\/.*?\r?\n|[^{])+\{([\s\S]*)\}$/) !== null) {
               return eval("(" + value + ")");
           } else {
               return value;
           }
        });
        // chart 是事先在全局定义的 echarts 的 init 的变量名
        chart.setOption(jsonResult);
    }
});

后端部分(只给出画图核心的代码部分, 以 Line 图为例)

def line_base() -> Line:
    line = (
        Line()
        .add_xaxis(list(range(10)))
        .add_yaxis(series_name="", y_axis=[randrange(0, 100) for _ in range(10)])
        .set_global_opts(
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(
                    is_show=True, formatter="function(params) { return params + 8;}"
                )
            )
        )
        .dump_options_with_quotes()  # 保留 JS 方法引号
    )
    return line

前端主要就是在解析 json 的情况下通过 JSON.parse 的回调函数进行处理。通过右侧的正则表达式判断是否为 js 的 function ​/(?:\/\*[\s\S]*?\*\/|\/\/.*?\r?\n|[^{])+\{([\s\S]*)\}$/​,从而避免字符串的同名冲突的问题。

示例如下: 

Q: Tooltip 中使用 '\n' 换行无效的问题

A: 请使用 ​<br/>​ 代替 ​\\n


pyecharts 赞助者名单
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

pyecharts 其他资源

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }