การเรียก 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