数据可视化工具Visdom

作者 | FaceBook Research

编译 | VK

来源 | Github

Visdom ,用于创建、 组织和共享实时丰富数据可视化的灵活工具。 支持Python。

  • 概述

  • 概念

  • 设置

  • 用法

  • API

  • 待办事项

  • 贡献

概述

Visdom旨在促进(远程)数据的可视化,重点是支持科学实验。

为你自己和你的团队成员生成图表,图像和文本的可视化。

以编程方式或通过用户界面来组织可视化空间,以创建实时数据的面板,来检查实验结果或调试实验代码。

概念

Visdom具有一组简单的特征,可以针对各种用例进行组合。

Windows

用户界面从空白开始,你可以在其中填充图表,图像和文本。这些出现在窗口中,你可以拖放,调整大小和销毁它们。这些窗口位于“ envs ”中,并且“ envs ”的状态跨会话存储。你可以下载本包Windows的相关内容,该内容包括“svg”中的绘图。

提示:你可以使用浏览器的缩放比例来调整UI的比例。

回调

python Visdom实现支持窗口上的回调。该演示以文本编辑器的形式显示了此示例。这些回调的功能允许Visdom对象接收前端中发生的事件并对事件做出反应。

你可以通过向你要订阅的窗口ID的事件处理程序字典添加一个函数来订阅事件的窗口,方法是使用处理程序和窗口ID调用 viz.register_event_handler(handler,win_id) 。可以将多个处理程序注册到同一窗口。你可以使用viz.clear_event_handlers(win_id)从窗口中删除所有事件处理程序。当该窗口发生事件时,你的回调将被调用,其中字典包含以下内容:

  • event_type :以下事件类型之一

  • pane_data :该窗口的所有存储内容,包括布局和内容。

  • eid :当前环境ID

  • target :事件被调用的窗口ID

其他参数在下面定义。

现在支持以下回调事件:

  1. Close -在关闭窗口时触发。返回仅包含上述字段的字典。

  2. KeyPress -按下键时触发。包含其他参数:

  • `key`-所按下键的字符串表示形式(应用状态修饰符,例如SHIFT)

  • `key_code`-所按下键的javascript事件键码(无修饰符)

  • PropertyUpdate -在“属性”窗格中更新属性时触发

    • `propertyId`-在属性列表中的位置

    • `value`-新属性值

  • Click -单击“图像”窗格时触发,具有一个参数:

    • `image_coord`-字典,其中x字段和y字段用于在可能缩放/平移的图像( 不是 封闭窗格)的坐标框中的单击坐标。

    环境

    你可以使用 envs 划分可视化空间。默认情况下,每个用户都有一个名为 main 的环境。可以在UI中或以编程方式创建新的环境。envs的状态会长期保存。环境能够保留完全不同的区域。

    你可以通过以下网址访问特定的环境:http://localhost.com:8097/env/main。

    如果你的服务器是托管服务器,则可以共享此URL,以便其他人也可以看到你的可视化效果。

    环境由第一个“_”自动分层组织。

    选择环境

    在主页上,可以使用环境选择器在不同的环境之间切换。选择新环境将向服务器查询该环境中存在的图。环境选择器允许搜索和过滤新的环境。

    比较环境

    从主页可以使用环境选择器比较不同的环境。在复选框中选择多个环境将向服务器查询所有环境中具有相同标题的图,并将它们绘制在单个图中。创建一个附加的比较图例窗格,该窗格具有与每个选定环境相对应的数字。使用与“x_name”相对应的图例更新各个图,其中“x”是与比较图例窗格相对应的数字,而“name”是图例中的原始名称。

    注意:比较环境视图对高吞吐量数据不可靠,因为服务器负责生成比较内容。所以不要比较这种绘图上会收到大量更新的环境,因为每次更新都会要求重新生成比较。如果你需要比较接收大量数据的两个图,请让它们在单个env上共享相同的窗口。

    清除环境

    你可以使用橡皮擦按钮删除环境中的所有当前内容。这将关闭该环境的绘图窗口,但保留新绘图的空白环境。

    管理环境

    按下文件夹图标将打开一个对话框,使用该对话框可以派生或强制保存当前环境,或删除任何现有环境。 State 部分中充分描述了此功能的使用。

    Env文件:

    你的环境在服务器初始化时加载,默认情况下从$HOME/.visdom/中加载。自定义路径可以作为cmd-line参数传递。通过使用删除按钮或从环境目录中删除相应的.json文件,可以删除环境。

    状态

    一旦创建了一些可视化文件,状态便得以维护。服务器自动缓存你的可视化文件-如果你重新加载页面,则可视化文件会重新出现。

    • 保存:你可以使用“保存”按钮手动进行操作。这将序列化环境的状态(以JSON格式存储到磁盘),包括窗口位置。你可以以编程方式保存 env

      这对于配置有意义的更复杂的可视化很有帮助,例如,数据丰富的演示,模型训练仪表板或系统实验。这也使它们易于共享和重用。

    • Fork:如果输入新的环境名称,保存将创建一个新的环境-有效地 Fork 先前的环境。

    提示:开始进行编辑之前,请先 Fork 环境,以确保单独保存所做的更改。

    筛选

    你可以使用 filter 动态筛选包含在环境中的窗口-只需提供一个正则表达式即可匹配你要显示的窗口标题。这在涉及带有多个窗口的env的用例中(例如系统检查实验结果时)可能会有所帮助。

    注意:如果保存了当前视图,则清除过滤器后将还原该视图。

    视图

    可以简单地通过拖动窗口顶部来管理视图,但是存在其他功能可以使视图井井有条并保存常见视图。视图管理对于在Windows的多个常见组织之间进行保存和切换非常有用。

    保存/删除视图

    使用文件夹图标,将打开一个对话框窗口,你可以在其中以与envs相同的方式派生视图。保存视图将保留给定环境中所有窗口的位置和大小。视图保存在visdom文件路径的 $HOME/.visdom/view/layouts.json 中。

    注意:保存的视图是静态的,并且编辑保存的视图会将视图复制到可以进行编辑的“当前”视图。

    重新打包

    使用重新打包图标(9个盒子),visdom将尝试以最适合你的窗口的方式打包窗口,同时保留行/列的顺序。

    注意:由于对行/列排序和 ReactGridLayout 的依赖,最终的布局可能与预期的略有不同。我们正在努力改善这种体验,或者提供替代方法以提供更好的控制。

    重新加载视图

    使用视图下拉菜单,可以选择以前保存的视图,将当前环境中所有窗口的位置和大小恢复到上次保存该视图时的位置。

    设置

    需要Python 3

    #从pip安装Python版服务器和客户端
    #(稳定的版本,并非所有当前功能都受支持)
    pip install visdom
    
    #从源代码安装visdom
    pip install -e .
    #如果上述问题出现,你可以尝试以下方法
    easy_install .
    

    用法

    从命令行启动服务器(可能在“屏幕”或“tmux”中):

    > visdom
    

    现在,可以通过在浏览器中转到 http://localhost:8097 或你自己的主机地址(如果已指定)来访问Visdom。

    visdom 命令等效于运行 python -m visdom.server

    如果上述方法不起作用,请尝试在服务器上使用SSH隧道,方法是将以下行添加到本地 ~/.ssh/config 中: LocalForward 127.0.0.1:8097 127.0.0.1:8097

    命令行选项

    可以向服务器提供以下选项:

    1. -port :运行服务器的端口。

    2. -hostname :运行服务器的主机名。

    3. -base_url :基本服务器的URL(默认=/)。

    4. -env_path :要重载的序列化会话的路径。

    5. -logging_level :日志记录级别(默认=INFO)。接受标准文本和数字日志记录值。

    6. -readonly :标记以只读模式启动服务器。

    7. -enable_login :标记以设置服务器的身份验证,需要用户名和密码才能登录。

    8. -force_new_cookie :标记以重置服务器使用的安全cookie,从而使当前的登录cookie无效。需要 -enable_login 开启。

    当提供 -enable_login 标志时,服务器要求用户使用终端提示输入凭据。或者,

    你可以设置 VISDOM_USE_ENV_CREDENTIALS env变量,然后通过 VISDOM_USERNAMEVISDOM_PASSWORD env变量提供你的用户名和密码

    ,无需手动与终端进行交互。

    如果你想从bash脚本或Jupyter笔记本电脑启动 visdom 服务器,这个功能很有用。

    VISDOM_USERNAME =username
    VISDOM_PASSWORD =password
    VISDOM_USE_ENV_CREDENTIALS = 1 visdom -enable_login
    

    如果未生成Cookie文件,也可以使用“VISDOM_COOKIE”变量提供Cookie值,或者标志 -force_new_cookie 已设置。

    Python示例

    import visdom
    import numpy as np
    vis = visdom.Visdom()
    vis.text('Hello, world!')
    vis.image(np.ones((3, 10, 10)))
    

    演示

    python example/demo.py