4

複数のサブプロットを持つ Pyplot を使用して、Python でプロットを作成しました。

どのプロットにもない線を引きたいと思います。プロットの一部である線を引く方法は知っていますが、プロット間の空白に線を引く方法がわかりません。

ありがとうございました。


リンクをありがとうございますが、プロット間に垂直線は必要ありません。実際には、特定の範囲を示すために、プロットの 1 つの上にある水平線です。図形の上に任意の線を引く方法はありませんか?

4

1 に答える 1

3

まず、これを行う簡単な方法はaxvspan、1 より大きい y 座標で使用する jut とclip_on=Falseです。ただし、線ではなく長方形を描画します。

簡単な例として:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))
ax.axvspan(2, 4, 1.05, 1.1, clip_on=False)
plt.show()

ここに画像の説明を入力

transform線を描画するには、kwarg として使用する を指定するだけですplot(実際には、他のほとんどのプロット コマンドにも同じことが当てはまります)。

「軸」座標 (例: 0,0 は軸の左下、1,1 は右上) でtransform=ax.transAxes描画するには、 と を使用して Figure 座標 (例: 0,0 は Figure ウィンドウの左下) で描画します、1,1 は右上) を使用しますtransform=fig.transFigure

@tcaswell が述べannotateたように、これはテキストの配置を少し簡単にし、注釈、矢印、ラベルなどに非常に役立ちます。注釈を付けてこれを行うことができます (ポイントと空白文字列の間に線を引くことによって)。線を引きたいだけなら、そうしない方が簡単です。

ただし、やりたいことのように聞こえることについては、少し違うことをしたいかもしれません。

x 座標が 1 つの変換を使用し、y 座標が別の変換を使用する変換を簡単に作成できます。これが舞台裏axhspanで行われていることです。axvspany 座標が軸座標に固定され、x 座標がデータ座標の特定の位置を反映するような、必要なものに非常に便利です。

次の例は、軸座標で描画することと、代わりに「混合」変換を使用することの違いを示しています。両方のサブプロットをパン/ズームしてみて、何が起こるかを確認してください。

import matplotlib.pyplot as plt
from matplotlib.transforms import blended_transform_factory

fig, (ax1, ax2) = plt.subplots(nrows=2)

# Plot a line starting at 30% of the width of the axes and ending at
# 70% of the width, placed 10% above the top of the axes.
ax1.plot([0.3, 0.7], [1.1, 1.1], transform=ax1.transAxes, clip_on=False)

# Now, we'll plot a line where the x-coordinates are in "data" coords and the
# y-coordinates are in "axes" coords.
# Try panning/zooming this plot and compare to what happens to the first plot.
trans = blended_transform_factory(ax2.transData, ax2.transAxes)
ax2.plot([0.3, 0.7], [1.1, 1.1], transform=trans, clip_on=False)

# Reset the limits of the second plot for easier comparison
ax2.axis([0, 1, 0, 1])

plt.show()

パンする前に

ここに画像の説明を入力

パン後

ここに画像の説明を入力

下のプロット (「混合」変換を使用) では、線はデータ座標にあり、新しい座標軸の範囲で移動しますが、上の線は座標軸にあり、固定されたままです。

于 2013-08-12T20:08:30.860 に答える