Gọi axvline trong một vòng lặp, như những người khác đã đề xuất, hoạt động, nhưng có thể bất tiện vì
- Mỗi dòng là một đối tượng cốt truyện riêng biệt, khiến mọi thứ rất chậm khi bạn có nhiều dòng.
- Khi bạn tạo huyền thoại, mỗi dòng có một mục mới, có thể không phải là điều bạn muốn.
Thay vào đó, bạn có thể sử dụng các hàm tiện lợi sau đây để tạo tất cả các dòng dưới dạng một đối tượng cốt truyện duy nhất:
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