[Jupyter Notebook]EChart画图以及如何获取Python定义的变量

小编 2026-06-26 阅读:1613 评论:0
1. 画一个基础的echart 目前发现有两种方法可以完成一个简单的Echart. 方法一 一种是使用%%html,在一个cell中写完HTML+JS代码。例如, %%html <d...

1. 画一个基础的echart

目前发现有两种方法可以完成一个简单的Echart.

  • 方法一

一种是使用%%html,在一个cell中写完HTML+JS代码。例如,

%%html
<div id=\"main\" style=\"width:700px;height:400px\"></div>
<script src=\"js/echarts.min.js\"></script>

<script>

<!-- do something -->
<!-- inital echart -->  

</script>
  • 方法2

另一种,%%javascript%%html结合使用,各司其职。

Jupyter Notebook自带requirejs,可以使用requirejs来引入外部js文件.

%%javascript

//配置js源地址,也可以使用本地的js文件
requirejs.config({
     paths:{
            \'echarts\': [\"http://echarts.baidu.com/dist/echarts.min\"],  //末尾会自动添加.js, 这里一定要去掉,否则引用失败  
             \'jquery\': [\"https://code.jquery.com/jquery-3.3.1.min\"],
         }
});
require([\"ecahrts\", \"jquery\"], function(echarts, jquery){
    
    // do something  
    // initial echart
});

2. 使用Python定义的变量

使用Notebook画图时,变量大多是之前用python脚本算好的。那么,要使Notebook中画echart实用,要解决的关键问题就是,如何使用python定义的变量画图.

Notebook javascript自带的IPython模块,让我们可以在js脚本中执行python的代码。
如图:

\"p1\"

Ipython.notebook.kernel.execute允许设置callbacks, 在callbacks中可以对代码执行的output进行相关处理。

var code = \"print (\'Hello World\')\";    
    var callbacks = {    
    iopub : {
        output: function(data){
            var res = data.content.text;
            // `res` is \'Hello World\'
            // do something
        }
    }
    };
execute(code, callbacks);

由此,我的基本思路就是通过处理output获取Python定义的变量。
单纯的print出来,当变量是list时,格式会有问题。所以通过json.dumps对数据进行了转换

var code = \"print(json.dumps([\"+ paramNames.join() +\"]))\";  
//paraNames是变量名组成的list
var callbacks = {    
    iopub : {
        output: function(data){
            var res = JSON.parse(data.content.text.trim()); 
            // do something
        }
    }

3. 完整代码

整理前面的思路, 将引用js,传递变量等部分,整理为一个js文件. 以后只需要引用这个js文件即可。

这是一个简陋且高度定制化的方法,目前基本满足我的日常工作,如果你有更好的意见或是建议,欢迎指出


//   my-echart.js  

requirejs.config({
     paths:{
            \'echarts\': [\"http://echarts.baidu.com/dist/echarts.min\"],
             \'jquery\': [\"https://code.jquery.com/jquery-3.3.1.min\"],
         }
});

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function execute(code, callbacks) {
    var kernel = IPython.notebook.kernel;
    // notebook分享给其他人时,为避免kernel未启动js报错,会等待kernel ready再画图
    while(!kernel){
    console.log(\'Taking a break...\');
    await sleep(2000);
    console.log(\'Two seconds later\');
    var kernel = IPython.notebook.kernel;
    }
    console.log(\"kernel has ready\");
    IPython.notebook.kernel.execute(\"import json\");
    IPython.notebook.kernel.execute(code,callbacks);
}

// 按顺序将echart option中的变量替换为callbacks获取的变量
function formatOption(option) {
    var string = JSON.stringify(option)
    var args = arguments[1];
    var pattern = new RegExp(\'([\", \\\'])\\%([1-\'+ args.length +\'])([\",\\\'])\', \"g\");
    var str_with_data = String(string).replace(pattern, 
                                               function(match,p1,index) {
        return JSON.stringify(args[index-1]);
    });
    return JSON.parse(str_with_data)
};


function loadChart(option,chartId){
    
    require([\"jquery\",\"echarts\"],function(jquery,echarts){    
    var myChart = echarts.init(document.getElementById(chartId));
    myChart.clear();
    
    myChart.setOption(option);

});    
};

// MAIN-FUNCTION
async function newEChart(chartId, option, paramNames){
    
    var code = \"print(json.dumps([\"+ paramNames.join() +\"]))\";    
    var callbacks = {    
    iopub : {
        output: function(data){
            var res = JSON.parse(data.content.text.trim()); 
            var optionWithData = formatOption(option,res);
            loadChart(optionWithData, chartId);
        }
    }
    };
    execute(code, callbacks);
};

4. 使用范例

  • 定义数据
x = [\"衬衫\",\"羊毛衫\",\"雪纺衫\",\"裤子\",\"高跟鞋\",\"袜子\"]
data = [5, 20, 36, 10, 10, 20]
  • 定义模块
%%html
<div id=\"main\" style=\"width:700px;height:400px\"></div>
<script src=\"js/my-echarts.js\"></script>   
  • initial Chart
%%javascript

// 指定图表的配置项和数据
var option = {
    title: {
        text: \'ECharts 入门示例\'
    },
    tooltip: {},
    legend: {
        data:[\'销量\']
    },
    xAxis: {
        data: \"%1\"   // 会被替换为 x
    },
    yAxis: {},
    series: [{
        name: \'销量\',
        type: \'bar\',
        data: \"%2\"  // 会被替换为 data
    }]
};


newEChart(\"main\",option,[\"x\",\"data\"]);
// params:  ID, option, parameter names list
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表