如何将matplotlib图表转换为唯一的交互式文件

时间:2013-01-26 10:12:49

标签: flash svg matplotlib interactive

我正在开发一个财务报告分析应用程序,基本上是为了处理数字并绘制条形图/线/饼图/散点图。该应用程序基于Pandas和matplotlib,效果很好。最终用户只是向我发送参数,应用程序将运行并生成SVG格式的图表文件,然后我可以将文件通过电子邮件发送给最终用户。

现在的问题是:SVG文件是静态的并且失去了交互能力,最终用户希望图表在鼠标点击或悬停在关键点或区域上时显示相关的注释。

我在我的机器上添加了matplotlib图表的交互功能,但它依赖于我安装的环境。最终用户在Windows上运行,不会安装python / matplotlib等,他们想要的只是一个文件,他们可以双击然后与内容互动。

我现在想要的是:将matplotlib图表转换为这种文件的最简单方法。有点像将图片转换为flash或动态SVG或用户可以与之交互的任何文件。

是否有任何python现有包或任何想法?谢谢,

1 个答案:

答案 0 :(得分:1)

stackoverflow search找到answer,指向example on matplotlib.org。假设用户将在Web浏览器中打开此文件,这应该可行。如果他用Inkscape或静态SVG查看器打开它,那么就没有办法给他一个互动体验。您当然也可以上传图表并向他发送链接。这可能是最方便的,并确保他在浏览器中查看它。

或者,考虑使用d3.js而不是matplotlib。它使用JavaScript生成的SVG并具有惊人的图表功能。将所需的交互行为添加到这些行为可能更容易。

当鼠标悬停在某个元素上方时,显示信息的快速解决方案是使用SVG中的<title>元素。任何<title>元素的内容将在悬停时显示为tootlip。见this example

<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="150">
  <rect width="50" height="50">
    <title>This is a rectangle</title>
  </rect>
  <circle cx="75" cy="75" r="25">
    <title>This is a circle</title>
  </circle>
  <text y="120">
    <tspan>Move your mouse over the</tspan>
    <tspan x="0" dy="20">elements to see the title text.</tspan>
  </text>
</svg>