8

matplotlib中,可以创建带有超链接的 SVG 图形

例如,我可以使用该scatter方法来绘制标记,以便每个单独的标记都是一个超链接。

但是,我的一些标记具有我使用该text方法创建的文本标签。我也可以以某种方式将文本标签转换为超链接吗?


到目前为止,我已经能够实现以下目标。首先,创建一个带有边界框的文本标签,以便bbox字典有一个url参数:

ax.text(x, y, label, bbox=dict(boxstyle=..., url=url))

然后稍微打补丁matplotlib/backends/backend_svg.py(1.1.1版),替换

self.writer.end('</a>')

self.writer.end('a')

现在它几乎可以工作了。我可以单击文本周围的区域,但不能单击文本本身(否则,如果我在白色背景上有黑色文本,我可以单击白色部分的任意位置,但不能单击黑色部分)。


将整个文本标签转换为超链接(文本及其边界框)的最简单方法是什么?

理想情况下,我更喜欢不需要修补 matplotlib 库的解决方案。

4

2 回答 2

2

matplotlib git 中的此更改允许将 Text 对象的 URL 字段呈现为呈现的 SVG 中的链接。

包括@travc 的代码,这可能看起来像:

url = "https://matplotlib.org/"
txt = plt.text(x, y, url, url=url, bbox = dict(color='w', alpha=0.01, url=url)
于 2013-10-15T13:02:49.143 回答
0

以下解决方案似乎工作正常。

  • gid文本元素的属性设置为唯一的字符串:

    ax.text(x, y, label, gid='foo')
    
  • 像往常一样创建 SVG 文件;还没有超链接。

  • 例如,lxml用于解析 SVG 文件。查找具有 属性的唯一<g>元素id="foo"。修改 XML 树:替换<g>...</g><a ...><g>...</g></a>. 保存结果。

同样的方法似乎普遍适用。许多元素接受一个gid参数。

于 2012-10-26T00:56:33.100 回答