IPython.display:SVG无法呈现SVG_filter_line生成的SVG图像(官方示例)

IPython.display:SVG无法呈现SVG_filter_line生成的SVG图像(官方示例),python,matplotlib,svg,jupyter-notebook,Python,Matplotlib,Svg,Jupyter Notebook,我正在使用Python3在MacOS上运行Jupyter(官方示例) SVG可以很好地处理大量SVG图像(例如,来自wiki的Worldmap图像) svg_filter_line的原始编码也运行良好 运行svg_filter_line生成一个名为“svg_filter_line.svg”的svg图像 SVG无法呈现此SVG图像“SVG\u filter\u line.SVG”,无错误,无警告 要做到这一点有点困难。解决方案如下:在处理文件时:我发现display()或display\u s

我正在使用Python3在MacOS上运行Jupyter(官方示例)

SVG可以很好地处理大量SVG图像(例如,来自wiki的Worldmap图像)

svg_filter_line的原始编码也运行良好

运行svg_filter_line生成一个名为“svg_filter_line.svg”的svg图像

SVG无法呈现此SVG图像“SVG\u filter\u line.SVG”,无错误,无警告


要做到这一点有点困难。解决方案如下:在处理文件时:我发现
display()
display\u svg()
函数显示的文件类型彼此略有不同(差异主要在于名称空间)。作为一种解决方法,必须使用svgutils重新保存SVG文件,然后读取并显示如下:

import svgutils.transform as sg
from IPython.display import SVG,display

#create new SVG figure
fig = sg.SVGFigure("16cm", "10cm")

# load matpotlib-generated figures
fig1 = sg.fromfile('svg_filter_line.svg')
plot1 = fig1.getroot()
fig.append([plot1])
fig.save("svg_filter_line2.svg")
display(SVG(filename='svg_filter_line2.svg'))
svgutils
可按如下方式安装:

import svgutils.transform as sg
from IPython.display import SVG,display

#create new SVG figure
fig = sg.SVGFigure("16cm", "10cm")

# load matpotlib-generated figures
fig1 = sg.fromfile('svg_filter_line.svg')
plot1 = fig1.getroot()
fig.append([plot1])
fig.save("svg_filter_line2.svg")
display(SVG(filename='svg_filter_line2.svg'))

conda安装-c conda forge svgutils

只有一个svg\u filter\u line.svg文件。“普通事物”是什么意思?有趣。我最初认为浏览器无法呈现svg,但如果在Firefox中打开创建的文件,它将按预期呈现。因此,jupyter笔记本和SVG之间存在一些相互作用,从而防止它被包括在笔记本页面的DOM树中。@ImportantanceOfBeingernest Chrome可以很好地呈现创建的文件“SVG\u filter\u line.SVG”和其他SVG。似乎jupyter单元是唯一无法很好地渲染创建的文件的地方。是的,这正是我上面所说的。酷,这是一个很好的解决方案。你知道问题的根源吗?是否可以将原始示例更改为开箱即用,或者svgutils对文件做了什么使其工作?我发现,
SVG()、display()或display_SVG()
from
IPython.display
能够读取SVG文件,但无法显示。然而,他们成功地在互联网上显示了svg。进一步的分析表明,对于原始实现中生成的SVG,存在名称空间差异。但是,
svgutils
这里不一定是真正的解决方案(取决于您如何定义真正的解决方案)。但是,在这项工作中要做的是创建一个新的SVG,然后添加以前创建的SVG的内容。(扩展注释)这样,我们就能够将现有的XML合并到名称空间中,IPython可以使用它来解释和呈现。(这是weired的一种封装或总结)我将奖励它,即使它没有解释问题的来源。