python - Altair: Inline SVG Rendering while removing external Dependencies in Jupyter Notebook - Stack Overflow

I'm trying to render an Altair chart as an inline SVG in a Jupyter Notebook while removing externa

I'm trying to render an Altair chart as an inline SVG in a Jupyter Notebook while removing external dependencies. My current approaches are falling short:

  • Using altair.renderers.set_embed_options(renderer="svg") doesn't remove external dependencies
  • Using altair.renderers.enable(renderer="svg", bundle_data=True) removes the external dependencies, but embeds the plot as an <img> tag instead of inline SVG

I specifically need the SVG to be inlined because I'm using custom SVG patterns in my chart encoding, which requires access to the raw SVG markup.

Prior cell

%%HTML
<svg width="0" height="0" version="1.1" xmlns="; xmlns:xlink="; xml:space="preserve" xmlns:serif="/" 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 code cell

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

Specific Question

How can I render the Altair chart as an inline SVG whilst completely removing external JavaScript dependencies?

What I've Tried

  • altair.renderers.set_embed_options(renderer="svg")
  • altair.renderers.enable(renderer="svg", bundle_data=True) The bundle_data=True has no effect when used inside set_embed_options

Desired Outcome

An inline SVG rendering of the Altair chart that:

  • Includes all pattern definitions
  • Has no external dependencies
  • Maintains full SVG manipulation capabilities

Environment

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

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744990518a4604875.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信