使用 Altair 创建词云

Dan*_*ler 1 tag-cloud word-cloud vega vega-lite altair

如何使用 Altair 创建 wordcloud?Vega 和 vega-lite 提供了我过去成功使用过的 wordcloud 功能。因此,如果我理解正确,应该可以从 Altair 访问它,并且我更喜欢用 Python 而非嵌入式 JSON 来表达可视化。我见过的所有 Altair 示例都涉及标准图表类型,例如散点图和条形图。我还没有看到任何涉及 wordcloud、网络、树状图等的内容。

更具体地说,我将如何在 Altair 中表达或至少近似以下 Vega 可视化?

def wc(pages, width=2**10.5, height=2**9.5):
 return {
  "$schema": "https://vega.github.io/schema/vega/v3.json",
  "name": "wordcloud",
  "width": width,
  "height": height,
  "padding": 0,
  "data" : [
      {
          'name' : 'table',
          'values' : [{'text': pg.title, 'definition': pg.defn, 'count': pg.count} for pg in pages)]
      }
  ],
  "scales": [
    {
      "name": "color",
      "type": "ordinal",
      "range": ["#d5a928", "#652c90", "#939597"]
    }
  ],
  "marks": [
    {
      "type": "text",
      "from": {"data": "table"},
      "encode": {
        "enter": {
          "text": {"field": "text"},
          "align": {"value": "center"},
          "baseline": {"value": "alphabetic"},
          "fill": {"scale": "color", "field": "text"},
          "tooltip": {"field": "definition", "type": "nominal", 'fontSize': 32}
        },
        "update": {
          "fillOpacity": {"value": 1}
        },
      },
      "transform": [
        {
          "type": "wordcloud",
          "size": [width, height],
          "text": {"field": "text"},
          #"rotate": {"field": "datum.angle"},
          "font": "Helvetica Neue, Arial",
          "fontSize": {"field": "datum.count"},
          #"fontWeight": {"field": "datum.weight"},
          "fontSizeRange": [2**4, 2**6],
          "padding": 2**4
        }
      ]
    }
  ],
}

Vega(wc(pages))
Run Code Online (Sandbox Code Playgroud)

jak*_*vdp 6

Altair 的 API 建立在 Vega-Lite 语法之上,其中仅包含 Vega 中可用的绘图类型的一个子集。无法在 Vega-Lite 中创建词云,因此无法在 Altair 中创建。