web-dev-qa-db-ja.com

matplotlibの垂直線と水平線

水平と垂直の線を指定された範囲で作成できない理由がよくわかりません。この箱でデータを縛りたいのですが。しかし、側面は私の指示に準拠していないようです。どうしてこれなの?

# 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()

enter image description here

109
Rohit

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

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

149
Bennett Brown

バウンディングボックスを追加したい場合は、長方形を使用してください。

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

Rectangle doc

16
tacaswell

これはおそらくMatplotlibの新しいユーザが垂直線と水平線を引くための共通の問題です。この問題を理解するためには、 Matplotlibには異なる座標系が存在します を知っておく必要があります。

メソッド axhline および axvline は、軸座標に線を引くために使用されます。この座標系では、プロットのデータ範囲に関係なく、左下の座標は(0,0)、右上の座標は(1,1)です。パラメータxminxmaxはどちらも[0,1]の範囲内です。

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

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

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()

次のようなプロットが生成されます。 enter image description here

xminおよびxmaxの値は、axhlineおよびhlinesメソッドの場合と同じです。しかし、生産ラインの長さは異なります。

10
jdhao