matplotlibの垂直線と水平線


122

指定された制限で水平線と垂直線を作成できない理由がよくわかりません。このボックスでデータをバインドしたいと思います。しかし、両サイドは私の指示に準拠していないようです。どうしてこれなの?

# CREATING A BOUNDING BOX
# BOTTOM HORIZONTAL
plt.axhline(y=.4, xmin=0.25, xmax=0.402, linewidth=2, color = 'k')
# RIGHT VERTICAL
plt.axvline(x=0.402, ymin=0.4, ymax = 0.615, linewidth=2, color='k')
# LEFT VERTICAL
plt.axvline(x=0.1, ymin=0.58, ymax = 0.79, linewidth=2, color='k')
plt.show()

ここに画像の説明を入力してください

回答:


166

pyplot機能は、あなたが呼び出して、さaxhline()axvline()関係なく、座標の、軸の範囲の一部にまたがる線を引きます。パラメータxminまたはymin値0.0は軸の最小値として、1.0は軸の最大値として使用します。

代わりに、を使用plt.plot((x1, x2), (y1, y2), 'k-')して、点(x1、y1)から点(x2、y2)に色kで線を描画します。を参照してくださいpyplot.plot


3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <-ドキュメント。回答を編集してこのリンクを含める必要があります
tacaswell

15
水平線と垂直線をプロットする別のソリューションが使用するhlinesか、vlinesこれが正規よりも自明であるように、それぞれ、plotIMO
SODD

20

これは、Matplotlibの新規ユーザーにとって、垂直線と水平線を描くための一般的な問題である可能性があります。この問題を理解するには、Matplotlibに異なる座標系が存在することに注意する必要があります。

メソッドaxhlineaxvlineは、Axes座標で線を描くために使用されます。この座標系では、プロットのデータ範囲に関係なく、左下の点の座標は(0,0)であり、右上の点の座標は(1,1)です。パラメータxminとの両方がxmax[0,1]の範囲にあります。

一方、メソッドhlinesおよびvlinesは、データ座標で線を描画するために使用されます。レンジ用xminxmaxx軸のデータの制限の範囲内です。

具体的な例を見てみましょう。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 100)
y = np.sin(x)

fig, ax = plt.subplots()

ax.plot(x, y)
ax.axhline(y=0.5, xmin=0.0, xmax=1.0, color='r')
ax.hlines(y=0.6, xmin=0.0, xmax=1.0, color='b')

plt.show()

次のプロットが生成されます。 ここに画像の説明を入力してください

の値 xminおよびxmaxaxhlineおよびhlinesメソッドと同じです。ただし、生成されるラインの長さは異なります。


16

境界ボックスを追加する場合は、長方形を使用します。

ax = plt.gca()
r = matplotlib.patches.Rectangle((.5, .5), .25, .1, fill=False)
ax.add_artist(r)

Rectangle 文書

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.