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 ファイルを作成します。ハイパーリンクはまだありません。

  • たとえば、lxmlSVG ファイルを解析するために使用します。<g>属性を持つ一意の要素を見つけますid="foo"。XML ツリーを変更します: に置き換え<g>...</g>ます<a ...><g>...</g></a>。結果を保存します。

同じアプローチが一般的に機能しているようです。多くの要素はgidパラメーターを受け入れます。

于 2012-10-26T00:56:33.100 に答える