Python Matplotlib将带有url的图形另存为svg会导致错误
我正在尝试创建一个条形图,其中每个条形图还链接到一个url 但是,当我尝试将图形保存为svg时,会出现错误Python Matplotlib将带有url的图形另存为svg会导致错误,python,matplotlib,url,svg,Python,Matplotlib,Url,Svg,我正在尝试创建一个条形图,其中每个条形图还链接到一个url 但是,当我尝试将图形保存为svg时,会出现错误AttributeError:“list”对象没有属性“replace”源自matplotlib的backends_svg.py 如果没有url,它可以正常工作。使用gid而不是url时,行为是相同的 MWE: 关于如何修复它有什么建议吗?表示url必须是字符串,但您使用的是列表 为什么在调用ax.bar时使用列表而不是字符串时不会引发异常 ax.bar(["A",&qu
AttributeError:“list”对象没有属性“replace”
源自matplotlib的backends_svg.py
如果没有url,它可以正常工作。使用gid而不是url时,行为是相同的
MWE:
关于如何修复它有什么建议吗?表示url
必须是字符串,但您使用的是列表
为什么在调用ax.bar
时使用列表而不是字符串时不会引发异常
ax.bar(["A","B"], [10, 4], url=["https://en.wikipedia.org", "https://www.google.com/"])
因为Matplotlib不会键入检查指定给url
的表达式。只有当SVG后端尝试使用url
的值时,才会引发异常,特别是后端假定它正在处理字符串并使用字符串方法,但您的值是列表,没有所需的方法,因此AttributeError:'list'对象没有属性“replace”
当Matplotlib尝试使用url
的值时,如何避免出现问题
- 如果要将链接与条形图整体关联,则必须使用 单字符串
- 如果要将链接关联到图形中的每个条,请执行以下操作:
我们可以这样做
... bars = plt.bar((1, 2), (3, 4)) for bar, url in zip(bars, ["https://en.wikipedia.org", "https://www.google.com/"]): bar.set_url(url) ...
bars = plt.bar((1, 2, 3), (3, 4, 5), url='https://www.google.com/0')
for n, bar in enumerate(bars, 1): bar.set_url('https://www.google.com/%d'%n)
plt.savefig('delenda.est', format='svg')
如您所见,SVG文件中仅保存与条形图相关的链接:
$ grep google delenda.est
<a xlink:href="https://www.google.com/1">
<a xlink:href="https://www.google.com/2">
<a xlink:href="https://www.google.com/3">
$
$grep google delenda.est
$
谢谢:我确实想在每个栏上添加一个链接。我在我的代码中包含了建议的方法,现在绘图可以保存而没有任何问题。但是,生成的svg似乎不包含URL作为href@Jonathan链接已正确保存到SVG输出,请参见我的编辑。我不知道你的进一步问题可能是什么,因为我不是SVG人,我甚至无法尝试帮助你——但我已经正确地解决了你在问题中报告的问题。如果有意义的话,我似乎犯了一个新手错误,将SVG包含在标记中而不是作为字符串。现在一切都很好。
$ grep google delenda.est
<a xlink:href="https://www.google.com/1">
<a xlink:href="https://www.google.com/2">
<a xlink:href="https://www.google.com/3">
$