matplotlibを使用してPythonでプロットを作成しました。各行に注釈を付けた後、ラベルをハイパーリンクにします(または、行自体をハイパーリンクにします)。テキストアイテムには「url」というプロパティがありますが、試してみましたが、何をするのかわかりません。
テキストまたは行オブジェクトをハイパーリンクにすることは可能ですか?
matplotlibを使用してPythonでプロットを作成しました。各行に注釈を付けた後、ラベルをハイパーリンクにします(または、行自体をハイパーリンクにします)。テキストアイテムには「url」というプロパティがありますが、試してみましたが、何をするのかわかりません。
テキストまたは行オブジェクトをハイパーリンクにすることは可能ですか?
この例は、SVGを出力する場合にハイパーリンクを設定する方法を示しています。これはSVGでのみ意味があることに注意してください。プロットが単なる画像である場合、それは単なる画像であり、画像にハイパーリンクを含めることはできません。
インタラクティブなプロットウィンドウでオブジェクトをクリックしてハイパーリンクのように機能させたい場合は、「ピック」イベントを処理するイベントハンドラーを作成し、ブラウザーなどを開くことができます。ピックイベントを実行する方法については、この例を参照してください。Matplotlibプロットは、Webページや実際のドキュメントではなく、グラフィックが表示された単なるウィンドウであるため、ハイパーリンク自体をサポートしていません。pickイベントを使用すると、オブジェクトがクリックされたときにWebブラウザーを開いてハイパーリンクをエミュレートできます。
編集:あなたは正しいです、それは機能しません。URLプロパティは、特定のタイプのオブジェクトに対してのみ読み取られ、使用されるようです。グーグルで、それについての古いmatplotlibメーリングリストの議論を目にします。そこでは、さまざまなアーティストタイプにURLサポートを徐々に追加するというアイデアがあったようですが、彼らはそれを理解できなかったと思います。matplotlibバグトラッカーでこれに関するバグを報告することをお勧めします。
それまでの間、それを行う方法はありますが、それはやや回りくどいです。URLはPathCollectionオブジェクト用に描画されるため、テキストからPathを作成し、そのパスからPathCollectionを作成してから、そのPathCollectionをプロットに追加できます。次に例を示します。
pyplot.scatter([1, 2, 3], [4, 5, 6])
t = mpl.text.TextPath((2, 4), 'This is text', size=0.1)
pc = mpl.collections.PathCollection([t])
pc.set_urls(['http://www.google.com'])
ax = pyplot.gca()
ax.add_collection(pc)
pyplot.draw()
f = pyplot.gcf()
f.canvas.print_figure('fig.svg')
set_urls
を使用する必要があり、を使用しないことに注意してくださいset_url
。この方法では、クリック可能なテキストを含むSVGが生成されますが、いくつかの欠点があります。特に、データ座標でテキストサイズを手動で設定する必要があるようです。そのため、プロットされたデータの大きさに比べて、途方もなく大きくも小さくもないテキストサイズを見つけるのに少し手間がかかる場合があります。
ハイパーリンクを追加することは、たとえばSVGファイルを使用する場合に意味があります。
このurl
プロパティは、新しいmatplotlibバージョンで機能します。
text = plt.annotate("Link", xy=(2,5), xytext=(2.2,5.5),
url='http://matplotlib.org',
bbox=dict(color='w', alpha=1e-6, url='http://matplotlib.org'))
たとえば、とにかくブラウザで実行されるJupyterノートブックでは、次のようなハイパーリンクを使用してSVGを表示できます。
import matplotlib.pyplot as plt
from IPython.display import set_matplotlib_formats
set_matplotlib_formats("svg")
fig, ax = plt.subplots()
ax.scatter([1, 2, 3], [4, 5, 6])
text = ax.annotate("Link", xy=(2,5), xytext=(2.2,5.5),
url='http://matplotlib.org',
bbox=dict(color='w', alpha=1e-6, url='http://matplotlib.org'))
この方法で作成された図では、リンクをクリックしてmatplotlib.orgに移動できます。
これはpgfバックエンドで可能です:
#!/usr/bin/env python3
import matplotlib
matplotlib.use("pgf")
pgf_with_custom_preamble = {
"text.usetex": True,
"pgf.preamble": [
r"\usepackage{hyperref}"
]
}
matplotlib.rcParams.update(pgf_with_custom_preamble)
from matplotlib import pyplot as plt
x = range(5)
y = range(5)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, "r-", label=r"Hyperlink: \url{http://google.com}")
ax.legend()
fig.savefig("mwe.pdf")