在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库的解决方案。
答案 0 :(得分:2)
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
参数。