如何在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
相关产品推荐
相关产品推荐

