如何在 Altair 中使用 Vega/Vega-Lite 规格,例如创建圆形包装图?

2024-06-06

Vega 本身通过以下方式提供循环包装包变换 https://vega.github.io/vega/docs/transforms/pack/。你可以找到一个示例图here https://vega.github.io/vega/examples/circle-packing/.

我在中找不到包转换Altair 文档 https://altair-viz.github.io/user_guide/transform/index.html。它是否以某种方式暴露或者我可以轻松添加它?我想,我总是可以修改 JSON Vega 规范,但这可能有点脆弱。


Altair 构建在 Vega-Lite 之上,而不是直接构建在 Vega 之上。因此,Altair 中可用的变换是Vega-Lite 中指定的那些 https://vega.github.io/vega-lite/docs/transform.html。话虽如此,您可以直接在 Altair 中运行 Vega 规范,如下所示:

from altair.vega import Vega

Vega({
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "description": "An example of a circle packing layout for hierarchical data.",
  "width": 600,
  "height": 600,
  "padding": 5,
  "autosize": "none",

  "data": [
    {
      "name": "tree",
      "url": "https://raw.githubusercontent.com/vega/vega/main/docs/data/flare.json",
      "transform": [
        {
          "type": "stratify",
          "key": "id",
          "parentKey": "parent"
        },
        {
          "type": "pack",
          "field": "size",
          "sort": {"field": "value"},
          "size": [{"signal": "width"}, {"signal": "height"}]
        }
      ]
    }
  ],

  "scales": [
    {
      "name": "color",
      "type": "ordinal",
      "domain": {"data": "tree", "field": "depth"},
      "range": {"scheme": "category20"}
    }
  ],

  "marks": [
    {
      "type": "symbol",
      "from": {"data": "tree"},
      "encode": {
        "enter": {
          "shape": {"value": "circle"},
          "fill": {"scale": "color", "field": "depth"},
          "tooltip": {"signal": "datum.name + (datum.size ? ', ' + datum.size + ' bytes' : '')"}
        },
        "update": {
          "x": {"field": "x"},
          "y": {"field": "y"},
          "size": {"signal": "4 * datum.r * datum.r"},
          "stroke": {"value": "white"},
          "strokeWidth": {"value": 0.5}
        },
        "hover": {
          "stroke": {"value": "red"},
          "strokeWidth": {"value": 2}
        }
      }
    }
  ]
})

请注意 Altair 中的 Vega 包装器可能会在未来版本中被弃用 https://github.com/altair-viz/altair/issues/2817因为现在可以使用 IPython 显示 Vega 和 Vega-Lite 规格:

import json
from IPython.display import display

vg_spec = r"""{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "description": "An example of a circle packing layout for hierarchical data.",
  "width": 600,
  "height": 600,
  "padding": 5,
  "autosize": "none",

  "data": [
    {
      "name": "tree",
      "url": "https://raw.githubusercontent.com/vega/vega/main/docs/data/flare.json",
      "transform": [
        {
          "type": "stratify",
          "key": "id",
          "parentKey": "parent"
        },
        {
          "type": "pack",
          "field": "size",
          "sort": {"field": "value"},
          "size": [{"signal": "width"}, {"signal": "height"}]
        }
      ]
    }
  ],

  "scales": [
    {
      "name": "color",
      "type": "ordinal",
      "domain": {"data": "tree", "field": "depth"},
      "range": {"scheme": "category20"}
    }
  ],

  "marks": [
    {
      "type": "symbol",
      "from": {"data": "tree"},
      "encode": {
        "enter": {
          "shape": {"value": "circle"},
          "fill": {"scale": "color", "field": "depth"},
          "tooltip": {"signal": "datum.name + (datum.size ? ', ' + datum.size + ' bytes' : '')"}
        },
        "update": {
          "x": {"field": "x"},
          "y": {"field": "y"},
          "size": {"signal": "4 * datum.r * datum.r"},
          "stroke": {"value": "white"},
          "strokeWidth": {"value": 0.5}
        },
        "hover": {
          "stroke": {"value": "red"},
          "strokeWidth": {"value": 2}
        }
      }
    }
  ]
}
"""

display({"application/vnd.vega.v5+json": json.loads(vg_spec)}, raw=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Altair 中使用 Vega/Vega-Lite 规格,例如创建圆形包装图? 的相关文章

随机推荐

  • 使用正则表达式验证字符串是否安全

    我有一个网站 用户可以在其中选择用户名 目前 他们可以输入几乎任何字符 包括 ETC 我知道我可以使用正则表达式 这可能就是我的选择 我将使用否定集 我认为这是正确的工具 如下所示 那么 我怎样才能知道要放入该集合中的所有非法字符呢 我可以
  • 为什么我必须将 Async 包装到另一个异步工作流程中并让!它?

    我试图了解 F 中的异步工作流程 但我发现有一部分我真的不明白 下面的代码工作正常 let asynWorkflow async let result Stream TryOpenAsync partition gt Async Await
  • QSortFilterProxyModel + QAbstractItemModel modelIndex.internalPointer() 导致崩溃

    我在 PyQt 4 8 Python 2 7 中实现了自己的 QAbstractItemModel class FriendListModel QtCore QAbstractItemModel def init self groups c
  • 从 React 项目中删除 ESLint

    我使用 ESLint 配置到我的项目中eslint init 它已配置到我的项目中 现在我想从我的项目中删除它 因为它在项目中显示了不必要的错误 如何从我的项目中删除启动的 ESLint 基本上删除就可以了 eslintrc以及项目中的任何
  • `custom.js` 存在于哪里或者如何为 Jupyter 4.1.1 创建一个?

    我找不到custom js对于使用 Python3 5 1 安装在 pyenv virtualenv 下的 Jupyter 笔记本 有人说custom js位于 jupyter custom custom js但我没有 顺便说一句 我可以创
  • ASP.NET MVC 阻止用户直接访问 URL

    因此 我在 MVC 中创建了一个简单的 hello world 作为概念证明 索引视图列出了一些组成的记录 后面是典型的 编辑 详细信息 和 删除 操作链接 但是 根据哪个 AD 组拥有该记录 我不会呈现其中一些选项 举例来说 假设我要提取
  • Ruby MRI 1.8.7 - 文件写入线程安全

    在我看来 在 Ruby MRI 1 8 7 中写入文件是完全线程安全的 示例 1 完美的结果 File open test txt a f threads 1 000 000 times do n threads lt lt Thread
  • Pthread互斥锁由不同线程解锁

    一个天真的问题 我之前读到过 MUTEX 只能由锁定它的线程解锁 但我写了一个程序THREAD1锁定 mutexVar 并进入睡眠状态 然后THREAD2可以直接解锁mutexVar做一些操作并返回 gt 我知道每个人都说我为什么要这样做
  • 在 ms-sql 中查找最近的位置

    我将这些参数发送给我的脚本 纬度 41 0186 经度 28 964701 它是示例 我想找到最近的位置的名称 这个怎么做 查询必须更改代码的位置 sql查询 SELECT Name FROM Location WHERE Latitude
  • 将 MapView 限制为屏幕的一半

    我试图让地图仅填充屏幕的上半部分 并在下半部分填充一些其他布局 现在我知道使用权重与表格布局相结合应该可以实现这一点 但是同一段 XML 代码可以完美地与 say 按钮配合使用 但不能与地图配合使用 截图在这里 https i stack
  • 在 Cypress 中提取部分文本

    我是 Cypress 的新手 我需要从我的应用程序中提取文本的动态部分 div Hello World greeting number 9123 div 在此示例中 我需要从 div 中提取 9123 以便稍后在测试中使用 知道我应该怎么做
  • 连接到 SQL Server 数据库 C#-WinForms

    我正在制作一个桌面应用程序 我希望用户必须登录才能充分使用该程序 我已经在 www winhost com 我的网站的托管位置 上创建了一个数据库 但现在我不知道该怎么办 我一直在使用 google 和 msdn 我想知道如何以编程方式将新
  • ASP.NET Core Web 应用程序和 Razor 类库项目之间的路由

    我创建了一个 ASP NET Core 3 0 MVC 项目 它运行良好 在同一个解决方案中 我添加了 3 个 或更多 项目 Razor 类库 每个这样的项目都有一个控制器 如何配置路由以便可以访问这些项目的控制器方法 我的解决方案如下所示
  • 在 Windows 下使用 linux 实用程序的最佳方法是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Linux 实用程序 如 sed awk 和其他 shell 脚本功能 非常棒 但当我在 Windows 上进行开发并且无法使用其中任何一
  • 在 SignOut() 之后使用浏览器的后退按钮允许访问安全页面 (ASP.NET MVC)

    我有一个 MVC 应用程序 它使用 Authorize 来保护私有位 当我选择 SignOut URL 时 它会将我注销 但如果我点击浏览器上的后退按钮 它会转到安全页面 甚至允许我使用该表单 该操作发生 然后显示我已退出 问题是它执行安全
  • 类型错误:无法读取未定义的属性“post”

    嗨 我只想使用一个简单的功能 http post 将我的日期发布到页面 我希望服务器能够获取我发布的日期 import Component OnInit from angular core import MarginServcies fro
  • 翻转通过CVOpenGLESTexture获得的OpenGL ES纹理

    在我尝试 OpenGL ES 2 0 的最后一天 当我尝试将两个投影纹理 一个精灵动画和一个视频文件纹理 应用到天空盒时 我开始像存根一样简单地用手敲击键盘 奇迹般地它就成功了 一切都开始工作了 然而 从视频文件创建的纹理是颠倒的 换句话说
  • 子文件夹中忽略 ASP.NET web.config 授权设置

    我正在使用 asp net mvc 2 和 vs 2008 我正在尝试制作具有表单授权的网站 当我尝试限制对某些页面的访问时 我正在使用 asp net 管理工具 例如 我创建规则来拒绝匿名用户访问整个网站 正如预期的那样 管理工具在根 w
  • 如何将参数传递给 VSCode launch.json 文件中为 lldb 指定的可执行文件?

    我想在 VSCode 中调试这个命令 myExecutable f arg1 g arg2 e arg3 请注意 可执行文件需要 3 个参数 在 lldb 中运行此可执行文件时 我们需要使用 将参数传递给可执行文件 lldb myExecu
  • 如何在 Altair 中使用 Vega/Vega-Lite 规格,例如创建圆形包装图?

    Vega 本身通过以下方式提供循环包装包变换 https vega github io vega docs transforms pack 你可以找到一个示例图here https vega github io vega examples