如何使用mpld3和flask将matplotlib图放入html容器中

Bri*_*den 5 python matplotlib flask mpld3

我试图使用mpld3-flask示例(https://github.com/nipunreddevil/mpld3-flask)作为模板来实现某种行为.我想要的是将标题栏上的链接添加到不同的图表,而不是使用单选按钮查询表单.

现在,上面的示例代码在templates/index.html中创建一个容器,然后在用户通过单击"查看绘图"按钮提交查询时用绘图填充它.就我所知,在index.html中,这个代码会发生这种情况:

$("#query").click(function() {  

  $("#loading-div-background").show();
  $("#container").hide();
  var plot_type = $('input:radio[name=plot_type]:checked').val();
  var qu = {"plot_type":plot_type}
  $.ajax({
    type: "POST",
    async:true,
    contentType: "application/json; charset=utf-8",
    url: "/query",
    data: JSON.stringify(qu),
    success: function (data) {     
     var graph = $("#container");
     graph.html(data);   
     $("#loading-div-background").hide();      
     $("#container").show();
   },
   dataType: "html"
 });
});
Run Code Online (Sandbox Code Playgroud)

我想要的是添加到当前包含"Home"的标题栏中,并在不同的页面中显示每个示例图.我将路由到另一个链接,然后使用绘图的数据填充模板html代码,而无需用户查询.

我对html有点新手,而且在这一点上基本上对JavaScript一无所知.我的感觉是有一些相对简单的方法来使用flask + jinja2来做到这一点,但我无法弄明白.

我在组合所有这些语言时产生的那种不清楚的命名空间方面遇到了一些麻烦.在我自己的python编程中,我通常对命名空间非常严格(即我永远不会使用'来自____ import*')所以这让我有点疯狂.

Bri*_*den 7

工作了一段时间后,我找到了一个似乎有效并实现我想要的行为的解决方案。请注意,我正在使用 twitter bootstrap css 和 javascript 包。

基本上,我制作了一个按钮组:

  <div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary">
      <input type="radio" name="options" id="home"> Option 1
  </label>
  <label class="btn btn-primary">
      <input type="radio" name="options" id="option2"> Option 2
  </label>
  <label class="btn btn-primary">
      <input type="radio" name="options" id="option3"> Option 3
  </label>
Run Code Online (Sandbox Code Playgroud)

然后在 mpld3-flask 示例中的 javascript 中,我使用:

$('.btn-primary').on('click', function(){
  var qu = {"plot_type":$(this).find('input').attr('id')}
  $(this).addClass('active').siblings().removeClass('active');
  $.ajax({
    type: "POST",
    async:true,
    contentType: "application/json; charset=utf-8",
    url: "/query",
    data: JSON.stringify(qu),
    success: function (data) {
     var graph = $("#container");
     graph.html(data);
     $("#container").show();
     },
   dataType: "html"
  });  
}); 
Run Code Online (Sandbox Code Playgroud)

现在我有一个单选按钮栏,当前活动的绘图按钮设置为“活动”,只需单击其中一个按钮即可绘制新绘图。

编辑:在了解了更多有关flask 和Jinja2 的知识后,将mpld3 生成的html 传递给aa 模板也很容易,但有一个小问题;它看起来像这样

在你的 python 路由函数的返回中:

return render_template('index.html', plot=mpld3_html)

然后在 html 模板中,您可以使用

{{plot|safe}}

希望这对其他人有帮助。