Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib将带有url的图形另存为svg会导致错误_Python_Matplotlib_Url_Svg - Fatal编程技术网

Python Matplotlib将带有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

我正在尝试创建一个条形图,其中每个条形图还链接到一个url

但是,当我尝试将图形保存为svg时,会出现错误
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">
$