回答:
実際の高さを指定しなくても、プロットウィンドウ全体を覆う垂直線を追加する標準的な方法は次のとおりです。 plt.axvline
import matplotlib.pyplot as plt
plt.axvline(x=0.22058956)
plt.axvline(x=0.33088437)
plt.axvline(x=2.20589566)
または
xcoords = [0.22058956, 0.33088437, 2.20589566]
for xc in xcoords:
plt.axvline(x=xc)
あなたが他のプロットコマンドの使用可能なキーワードの多くを使用することができます(たとえばcolor
、linestyle
、linewidth
...)。キーワード引数ymin
を渡すことができymax
ます。Axesで調整する場合は、たとえばymin=0.25
、ymax=0.75
プロットの中央をカバーします。水平線(axhline
)と長方形(axvspan
)に対応する関数があります。
ax
がオブジェクトの場合、ax.axvline(x=0.220589956)
私にとってはうまくいくようです。
plt.plot((x1,x2),(y1,y2))
複数回線の場合
xposition = [0.3, 0.4, 0.45]
for xc in xposition:
plt.axvline(x=xc, color='k', linestyle='--')
label='label'
機能しますが、plt.legend([options])
後で電話する必要があります
legend
やを追加したい場合はcolors
、これを使用します:import matplotlib.pyplot as plt
# x coordinates for the lines
xcoords = [0.1, 0.3, 0.5]
# colors for the lines
colors = ['r','k','b']
for xc,c in zip(xcoords,colors):
plt.axvline(x=xc, label='line at x = {}'.format(xc), c=c)
plt.legend()
plt.show()
結果:
他の人が示唆したように、ループでaxvlineを呼び出すことは機能しますが、次の理由で不便な場合があります。
代わりに、すべての線を単一のプロットオブジェクトとして作成する次の便利な関数を使用できます。
import matplotlib.pyplot as plt
import numpy as np
def axhlines(ys, ax=None, **plot_kwargs):
"""
Draw horizontal lines across plot
:param ys: A scalar, list, or 1D array of vertical offsets
:param ax: The axis (or none to use gca)
:param plot_kwargs: Keyword arguments to be passed to plot
:return: The plot object corresponding to the lines.
"""
if ax is None:
ax = plt.gca()
ys = np.array((ys, ) if np.isscalar(ys) else ys, copy=False)
lims = ax.get_xlim()
y_points = np.repeat(ys[:, None], repeats=3, axis=1).flatten()
x_points = np.repeat(np.array(lims + (np.nan, ))[None, :], repeats=len(ys), axis=0).flatten()
plot = ax.plot(x_points, y_points, scalex = False, **plot_kwargs)
return plot
def axvlines(xs, ax=None, **plot_kwargs):
"""
Draw vertical lines on plot
:param xs: A scalar, list, or 1D array of horizontal offsets
:param ax: The axis (or none to use gca)
:param plot_kwargs: Keyword arguments to be passed to plot
:return: The plot object corresponding to the lines.
"""
if ax is None:
ax = plt.gca()
xs = np.array((xs, ) if np.isscalar(xs) else xs, copy=False)
lims = ax.get_ylim()
x_points = np.repeat(xs[:, None], repeats=3, axis=1).flatten()
y_points = np.repeat(np.array(lims + (np.nan, ))[None, :], repeats=len(xs), axis=0).flatten()
plot = ax.plot(x_points, y_points, scaley = False, **plot_kwargs)
return plot