6

複数のサブプロット (軸) を持つ matplotlib にプロットがあり、軸内の点に注釈を付けたいと考えています。ただし、後続の軸は前の軸の注釈をオーバーレイします (たとえば、subplot(4,4,1) の注釈は subplot(4,4,2) の下に入ります)。注釈 zorder を素晴らしく高く設定しましたが、役に立ちません:/

注釈には、 Joe Kington のすばらしいDataCursorの修正版を使用しました。

どんな助けでも大歓迎です

次に例を示します。 ここに画像の説明を入力

4

1 に答える 1

9

これを行う 1 つの方法は、によって作成されたテキストをannotate軸の外にポップし、Figure に追加することです。このようにして、すべてのサブプロットの上に表示されます。

あなたが抱えている問題の簡単な例として:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=5, ncols=5)
plt.setp(axes.flat, xticks=[], yticks=[], zorder=0)

ax = axes[0,0]
ax.annotate('Testing this out and seeing what happens', xy=(0.5, 0.5), 
            xytext=(1.1, .5), textcoords='axes fraction', zorder=100)

plt.show()

ここに画像の説明を入力

軸からテキスト オブジェクトを取り出し、代わりに Figure に追加すると、一番上になります。

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=5, ncols=5)
plt.setp(axes.flat, xticks=[], yticks=[], zorder=0)

ax = axes[0,0]
ax.annotate('Testing this out and seeing what happens', xy=(0.5, 0.5), 
            xytext=(1.1, .5), textcoords='axes fraction', zorder=100)

fig.texts.append(ax.texts.pop())

plt.show()

ここに画像の説明を入力

スニペットについて言及しましたが、そこでメソッドDataCursorを変更したいと思います。annotate

def annotate(self, ax):
    """Draws and hides the annotation box for the given axis "ax"."""
    annotation = ax.annotate(self.template, xy=(0, 0), ha='right',
            xytext=self.offsets, textcoords='offset points', va='bottom',
            bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.5),
            arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0')
            )
    # Put the annotation in the figure instead of the axes so that it will be on
    # top of other subplots.
    ax.figure.texts.append(ax.texts.pop())

    annotation.set_visible(False)
    return annotation

私は最後のビットをテストしていませんが、うまくいくはずです...

于 2012-12-12T03:38:28.210 に答える