【问题标题】:Looking for library/tool to visualise multi-dimensional data [closed]寻找库/工具来可视化多维数据[关闭]
【发布时间】:2012-02-15 18:33:17
【问题描述】:

我正在使用 Python 来分析大量的经验测量。本质上,我有两个函数来转换经验数据,它们也接受 3 个“计数”参数 - 并在每个配置中返回一系列浮点数。我期待(希望)在选择适当的参数时看到一些有趣的模式。我预计模式可能在为每个函数返回的序列之间是相对的 - 和/或与参数中的某种模式有关。如果相关,3个“计数”参数大致对应于:

  • 计算汇总统计信息的基础数据的“窗口大小”
  • 用于计算单个汇总统计数据的多个连续窗口(即更高的空间精度或更高的时间精度之间的权衡)
  • “最小年龄” - 基础数据历史记录的偏移量。

汇总统计信息(为每个参数配置生成浮动的结果序列)并不重要,但将对所有三个参数独立敏感。

我对可视化技术感兴趣 - 适用于 RAD/ad-hoc 查询,这将帮助我试验这种多维数据。

到目前为止,我已经修改了MatPlotLib,但发现以批处理方式生成两个 2/3 维度的图受到限制,这使得调查非常乏味。理想情况下,我会找到一个工具,可以让我可视化两个以上的维度……也许可以让我在交互式 GUI 中的维度之间实时切换。

我非常感谢任何可视化专家提供的关于我应该研究的合适工具的提示——最好是与我现有的 Python 函数集成——或其他语言。我特别想听听任何关于类似可视化问题的成功轶事。

编辑添加:我正在考虑的一种可能方法是在 2 或 3D 图上使用动画(捕捉另一个维度......留下 1 或 2手动选择)...虽然我还没有找到可以帮助我实现这一目标的好工具。

【问题讨论】:

标签: python graphics graph visualization spatial


【解决方案1】:

3+维度的最简单的可视化是气泡图或动态图。在 x 和 y 轴的顶部,您可以使用气泡大小和气泡颜色作为额外尺寸。

Google 可视化 (http://code.google.com/apis/chart/interactive/docs/gallery/motionchart.html) 和它的 google 电子表格交互模式提供了一个简单的界面来玩哪个维度在哪个维度上轴/尺寸/颜色。

它的目的不是处理太多的数据点,但您可以使用它轻松识别数据样本上的模式。

【讨论】:

    【解决方案2】:

    听起来像Mayavi 可能符合您的需求。它是用 Python 编写的,可以交互使用并支持 3D 图形和动画。您可以查看this tutorial,看看它是否符合您的需求。

    我使用旧版本 1 的 mayavi 在 Python 中使用动画完成了交互式 3D 可视化,请参阅this page


    编辑

    不幸的是,大多数 Mayavi 示例都展示了太多高级功能。这里有两个示例演示了更基本的应用程序。如果这两个不符合您的需求,那么 Mayavi 可能不是您的最佳选择。我的理解是,您有想要可视化的浮点数组。

    示例 1

    这是旧页面中的一个具体示例,说明您可以使用 3D 浮点数组做什么:3D data example。此示例显示了等高线曲面的使用,一个穿过数据的实体剖切面和另一个具有等高线的剖切面。您可以交互地移动切割平面或选择不同的可视化工具。 (在我的例子中,我添加了另一个维度和动画,将数据呈现为穿过超立方体的 3D 立方体切片。)

    示例 2

    这是另一个使用 Mayavi 进行更“传统”情节的示例:Fourier transform example。这与许多其他绘图库所做的非常相似。

    【讨论】:

    • 我的第一印象是 Mayavi 主要专注于视觉上令人印象深刻的渲染,而不是实时绘制基本的线/曲面图。我会欢迎它的使用示例显示相反的......
    • 感谢您提供的示例......尽管它们似乎没有解决我的主要问题 - 即我有 3 个参数传递给函数以生成我们可能假设的一系列浮点数可以表示为折线图。当然,我可以切换到 3D 表面并拥有一个带有两个参数的函数——也许我可以制作动画以失去另一个……但总是会有太多参数无法在一个绘图上进行编码。因此,我认为我需要的关键是能够以交互方式更改参数 - 理想情况下,切换我直接绘制的参数和手动调整的参数。
    • @aSteve:感谢您的澄清。使用 Mayavi,您仍然需要提供要可视化​​的数据。在您的情况下,这意味着您仍然需要提供 (G)UI,让您可以选择要绘制的参数集、应该变化的内容和保持固定的内容、如何定位表面以及要设置动画的内容。您需要在 Python 中单独编写这些内容,因为 Mayavi 无法为您完成这部分工作。然而,一旦你这样做了,你就可以将完整的 Mayavi 引擎集成到你的用户界面中,参见例如github.enthought.com/mayavi/mayavi/advanced_scripting.html
    【解决方案3】:

    去下载 Tableau 的免费试用版 (www.tableausofware.com)。它将根据 X、Y、大小、颜色和形状对您的数据进行编码,并且您可以创建任何其他维度的小倍数 - 即您可以一次查看许多维度。您可以非常快速地尝试大量的可视化。公司网站上有免费培训。

    免责声明:我为他们工作。

    【讨论】:

    • 我可以使用这个软件来绘制我即时计算的数据,还是只能在预先计算所有数据(以特定格式)时使用它?
    【解决方案4】:

    好的,既然我了解了您的数据,我绝对可以建议一种可视化方法。彩色 3D 表面密度图。使用 a0、a1 和 a2 作为标准 x、y、z 轴,使用 a3 作为时间轴,并在单色范围(或冷到热)上绘制不同的颜色。这样,唯一需要交互式滑块的就是 a3。

    就执行此操作的工具而言

    1. 我不知道 gnuplot 是否可以绘制颜色密度图,如果可以,这是您最好的选择。跨 a3 域生成一组 gif,使用 imagemagick 从中制作单个动画 gif,然后使用允许您在帧之间来回移动的动画 .gif 编辑器
    2. 同样,使用 matplotlib,我不确定是否可以绘制颜色密度图
    3. SVG 绝对可以完成您需要做的所有事情,包括动画方面,但正如我之前所说,这将是一项艰巨的工作。

    【讨论】:

    • 我认为在这样的情节中发生的事情太多,无法理解数据。 :) 我对 SVG 的主要反对意见是我需要一些交互式的东西——允许我实时“摆弄”参数……如果这是我的目标,SVG 似乎非常低级。
    • 您尝试将 5 维数据可视化。不管你怎么做,都很难理解。您最多可以在没有颜色的屏幕上有意义地显示 4 个维度,即使如此,第 4 个维度(随时间变化)通常也很难掌握。
    【解决方案5】:

    RGL是R的可视化设备系统,使用OpenGL作为渲染后端。 rgl 设备的核心是用 C++ 编写的实时 3D 引擎。它提供了一个交互式视点导航设施(鼠标+滚轮支持)和一个 R 编程接口。

    GGobi 是一个用于探索高维数据的开源可视化程序。它提供高度动态和交互式的图形,例如游览,以及熟悉的图形,例如散点图、条形图和平行坐标图。情节是互动的,并与刷牙和识别相关联。

    有一个教程涵盖了上述两个系统here

    RPy 是 R 编程语言的一个非常简单但功能强大的 Python 接口。它可以管理各种R对象,可以执行任意R函数(包括图形函数)。来自 R 语言的所有错误都转换为 Python 异常。为 R 系统安装的任何模块都可以在 Python 中使用。

    【讨论】:

    • 非常感谢这两个建议 - 两者都值得我进行更详细的检查。我听说过 RPy,但从未使用过它,因此该推荐也很有帮助。你确定你打算把这个链接用于教程……它对我来说更像是一个广告?两者的唯一障碍是我看不到使用该工具与我的结构相似的数据的示例......即映射到采样连续函数的 3 个维度。如果我忽略了这样一个例子,我会很感激一个明确的指针。 :)
    • 恐怕我没有使用过任何一个包,否则我会提供一个更具体的例子,但根据定义,至少 GGobi 听起来完全像你所追求的那种东西 - “可视化程序用于探索高维数据”。您对我发布的“教程”是正确的 - 这实际上是一系列研讨会,但他们免费在线提供所有课程材料,您可能会觉得有用。
    • 我对课程材料没有太大兴趣...虽然我找到了一本书的参考资料:“使用 R 和 GGobi 进行数据分析的交互式和动态图形”@987654325 @ - 我现在打算阅读。我不确定这是解决这个问题的最佳答案——但它在这个领域肯定是相关的。老实说,我认为找到与我的问题相似的形式的示例可视化比它已经证明的要容易得多。
    • 使用 Matplotlib 制作动画相对简单,如果您所追求的只是动画 3d 绘图 - matplotlib.sourceforge.net/examples/animation/…
    【解决方案6】:

    你可以试试guiqwt。它针对 2D 图形,但针对更具体的交互式绘图(与 Matplotlib 不同,尽管它也可以处理某种程度的交互)。来自 guiqwt 文档:

    概述

    基于 PyQwt(PyQt4 图形用户界面的绘图小部件) 在科学模块 NumPy 和 SciPy 上,guiqwt 是 Python 库提供高效的 2D 数据绘图功能(曲线/图像 可视化和相关工具)用于交互式计算和 信号/图像处理应用开发。

    表演

    目前最流行的用于数据绘图的 Python 模块是 matplotlib,一个提供大量绘图类型和 一个非常接近 MATLAB 绘图的 API(pylab 接口) 界面。

    guiqwt 绘图功能在绘图类型方面非常有限 与 matplotlib 相比。然而,目前实施的情节类型 效率更高。例如,guiqwt 图像显示 函数 (guiqwt.pyplot.imshow()) 不会复制 显示数据,因此允许显示更大的图像 比它的 matplotlib 的对应物。换句话说,当显示 带有 guiqwt 的 30 MB 图像(例如 16 位无符号整数),无 额外的内存被浪费来显示图像(除了 当然,屏幕外图像取决于窗口大小)而 matplotlib 需要超过 600 MB 的额外内存(原始 数组使用 64 位浮点数据类型重复四次)。

    (我没有尝试过,所以我无法评论这些说法。)

    【讨论】:

    • 我已经找到并安装了 PyQwt - 但我没有遇到任何明显的策略来使用这个库来处理我上面确定的那种地块。我真的很想看到一个与我的问题类似的例子,以便对这种方法充满信心。
    • 我不确定我们是否在谈论同一个库,但据我所知,guiqwtPyQwt 不同。
    • 我不准确...我都安装了。我已经(简要地)看过这个:code.google.com/p/guiqwt - 虽然我看不出它如何帮助解决这个问题。
    【解决方案7】:

    如果您想要的只是一个动画表面,那么 gnuplot 可以做到。对它的快速介绍can be found herefrom the gnuplot FAQ。更多细节显然可以在 gnuplot 文档中找到。

    【讨论】:

    • 如果可以的话,我很想使用 GNUPlot……而且动画 GIF 支持看起来很漂亮。我不清楚我将如何以交互方式使用它……据我所知,动画 GIF 是作为批处理生成的——而我希望能够实时更改参数。 .. 因为,即使是动画表面,这也只能处理我的 4 个抽象维度中的 3 个。
    • 等等,动画表面不是显示 4 个维度(x、y、z、t)。
    • 我在想你可以生成 gnuplot 动画来响应用户输入,然后通过使用 subprocess 来控制 gnuplot 来显示它们。不是一个很好的解决方案,但可能
    • 我的数据可以表示为一组元组 (a0,a1,a2,a3,v) - 4 个抽象维度(均以由常规全局时钟标识的时间单位测量)和一个值- 一个由浮点数近似的标量实数值。这意味着,无论我使用什么 3D 方法(甚至是动画),我都没有足够的维度来直接映射元组。因此,我需要一种交互方式来选择 (a0,a1) 以将 (a2,a3,a4,v) 实时可视化为动画 3D 图。或者,为 (a3,a4,v) 等的静态曲面图选择 (a0,a1,a2)。
    • 啊抱歉,当您在赏金摘要中说您的数据是 4D 时,我误解了。不确定其他人是否会同意,但我会说这是一个 5D 问题,因为 v 是您希望显示的维度
    【解决方案8】:

    您可能想查看输出带有动画的 SVG,在这种情况下,this question 可能会让您感兴趣。我怀疑动画方面需要你做很多工作。另一种选择可能是将数据可视化为图表,尽管我对您的数据知之甚少,无法知道这是否对您有用。如果是,则 cytoscape 是python scriptable

    【讨论】:

    • 这是我试图避免的“大量工作”。如果我确信我正在寻找的模式是存在的,我不介意付出这种努力......目前这是一次性交易,我将是唯一的用户。我对我计划可视化的数据结构了解不多。我希望每个单独序列(对于 3 个特定参数)的折线图能够近似连续函数……以及通过将其与 3 个参数中的任何一个相关的绘制所生成的表面。
    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 2011-08-22
    • 2011-08-02
    • 1970-01-01
    • 2010-09-26
    • 2012-11-03
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多