python,matplotlib,svg和文本标签中的超链接

时间:2012-09-12 11:53:08

标签: python hyperlink svg matplotlib

matplotlib中,可以create SVG figures with hyperlinks

例如,我可以使用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库的解决方案。

2 个答案:

答案 0 :(得分:2)

matplotlib git中的

This change可以将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)

答案 1 :(得分:0)

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

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

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

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

同样的方法似乎总体上起作用;许多元素接受gid参数。