You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Notebook中渲染Altair无外部依赖的内联SVG?

在Jupyter Notebook中生成无外部依赖的内联SVG Altair图表

我需要在Jupyter Notebook内将Altair图表渲染为内联SVG,同时完全移除外部依赖,但目前尝试的方法均存在缺陷:

  • 使用altair.renderers.set_embed_options(renderer="svg"):无法移除外部JavaScript依赖
  • 使用altair.renderers.enable(renderer="svg", bundle_data=True):能移除外部依赖,但图表以<img>标签嵌入,而非内联SVG

必须采用内联SVG的原因是,图表编码中使用了自定义SVG图案,需要访问原始SVG标记才能正常生效。


前置HTML单元格

%%HTML
<svg width="0" height="0" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
    <defs>
        <pattern id="dotspattern" x="10" y="10" width="159.002264" height="183.6" patternUnits="userSpaceOnUse" patternTransform="scale(0.2)">
          <circle id="base-dot" cx="79.501132" cy="91.8" r="44.5459745" fill="#753bbd"/>
          <use xlink:href="#base-dot" transform="translate(-79.501132,45.9)" />
          <use xlink:href="#base-dot" transform="translate(-79.501132,-45.9)" />
          <use xlink:href="#base-dot" transform="translate(79.501132,45.9)" />
          <use xlink:href="#base-dot" transform="translate(79.501132,-45.9)" />
          <use xlink:href="#base-dot" transform="translate(0,91.8)" />
          <use xlink:href="#base-dot" transform="translate(0,-91.8)" />
        </pattern>
    </defs>
</svg>

Python代码单元格

import altair as alt
import pandas as pd

data = pd.DataFrame({
    'category': ["Purple"],
    'value': [100],
    'pattern': ["pattern_1"]
})

chart = alt.Chart(data, title="Pattern", width=600, 
                  height=400).mark_bar(stroke=None).encode(
    x=alt.X("category:N", sort=data['category']),
    y=alt.Y("value:Q", axis=alt.Axis(title=None)),
    fill=alt.Fill("pattern:N", 
                  scale=alt.Scale(range=["url(#dotspattern)"]),
                  legend=None))
alt.renderers.set_embed_options(renderer='svg')

chart

核心问题

如何在完全移除外部JavaScript依赖的同时,将Altair图表渲染为内联SVG?

已尝试方案

  • altair.renderers.set_embed_options(renderer="svg")
  • altair.renderers.enable(renderer="svg", bundle_data=True):bundle_data=True参数在set_embed_options中不生效

期望结果

生成的内联SVG需满足:

  • 包含所有自定义图案定义
  • 无任何外部依赖
  • 保留完整的SVG操作能力

环境信息

  • Python: 3.12.4
  • Altair: 5.3.0
  • Vega-Lite: 5.20.1
  • Vega: 5
  • Vega-Embed: 6
  • Jupyter: 7.2.1

内容的提问来源于stack exchange,提问作者rekognizecode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:44:50