【问题标题】:How to transform a matplotlib chart to a sole interactive file如何将 matplotlib 图表转换为唯一的交互式文件
【发布时间】:2013-01-26 10:12:49
【问题描述】:

我正在开发一种财务报告分析应用程序,主要用于处理数字并相应地绘制条形/线/饼形/散点图。该应用程序基于 Pandas 和 matplotlib,运行良好。最终用户只需将参数发送给我,应用程序就会运行并生成 SVG 格式的图表文件,然后我可以将文件通过电子邮件发送给最终用户。

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

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

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

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

【问题讨论】:

  • 也许用 py2exe 把数据、你的代码、pandas 和 matplotilb 包起来? (虽然不确定这是否可能)
  • @wvxvw:为什么要依赖 Flash 和 ActionScript?你可以使用普通的 SVG 和 JavaScript 来做同样的事情。还是 Flash 的杀手级功能似乎与图表动画相关?
  • @wvxvw:我会将 JavaScript 打包到 SVG 文件中。我看不到 OP 在哪里需要可执行的 Windows 程序。我认为使用 SVG 他会更加灵活。
  • 我希望客户端的机器安装了一个不错的浏览器,所以不需要打包任何东西。当前的解决方案显然是无论如何都向他发送 SVG,以便他可以查看它(大概在浏览器中)。他会像以前一样接收 SVG,但这次具有交互性。
  • @bigbug:知道你到底想要什么交互功能会很有用(在点击图表的条形图时仅显示一些信息弹出窗口与动态重新调整条形图/饼图的大小完全不同) )。也许您还可以澄清我们关于 Flash 与 SVG 的小讨论的主题。

标签: flash svg matplotlib interactive


【解决方案1】:

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

或者,考虑使用 d3.js 代替 matplotlib。它使用 JavaScript 生成的 SVG 并具有惊人的图表功能。向它们添加所需的交互行为可能更容易。

当鼠标悬停在某个元素上方时显示信息的快速解决方案是使用 SVG 中的 <title> 元素。任何<title> 元素的内容都将在悬停时显示为提示信息。见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>

【讨论】:

  • 是的,建立网站并在云中托管应用程序是长期解决方案。 d3很棒。但是我是一个业余程序员,并且已经在matplotlib上付出了很多努力,完全使用d3来代替matplotlib在短时间内对我来说不是一个解决方案。 (d3 的任何 python 包装器,或从 matplotlib 到 d3 的翻译器)? “答案”链接很有帮助,我试试看。
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2021-01-30
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多