'Plot vertical lines.
Plot vertical lines at each `x` from `ymin` to `ymax`.
Parameters
x : scalar or 1D array_like
x-indexes where to plot the lines.
ymin, ymax : scalar or 1D array_like
Respective beginning and end of each line. If scalars are
provided, all lines will have same length.
colors : array_like of colors, optional, default: \'k\'
linestyles : [\'solid\' | \'dashed\' | \'dashdot\' | \'dotted\'], optional
label : string, optional, default: \'\'
Returns
lines : `~matplotlib.collections.LineCollection`
Other Parameters
**kwargs : `~matplotlib.collections.LineCollection` properties.
See also
hlines : horizontal lines
axvline: vertical line across the axes'

@_preprocess_data(replace_names=[u'x', u'ymin', u'ymax', u'colors'], label_namer=u'x')
def vlines(self, x, ymin, ymax, colors=u'k', linestyles=u'solid', label=u'', **kwargs):

    self._process_unit_info(xdata=x, ydata=[ymin, ymax], kwargs=kwargs)
    x = self.convert_xunits(x)
    ymin = self.convert_yunits(ymin)
    ymax = self.convert_yunits(ymax)
    if (not iterable(x)):
        x = [x]
    if (not iterable(ymin)):
        ymin = [ymin]
    if (not iterable(ymax)):
        ymax = [ymax]
    (x, ymin, ymax) = cbook.delete_masked_points(x, ymin, ymax)
    x = np.ravel(x)
    ymin = np.resize(ymin, x.shape)
    ymax = np.resize(ymax, x.shape)
    verts = [((thisx, thisymin), (thisx, thisymax)) for (thisx, thisymin, thisymax) in zip(x, ymin, ymax)]
    lines = mcoll.LineCollection(verts, colors=colors, linestyles=linestyles, label=label)
    self.add_collection(lines, autolim=False)
    lines.update(kwargs)
    if (len(x) > 0):
        minx = x.min()
        maxx = x.max()
        miny = min(ymin.min(), ymax.min())
        maxy = max(ymin.max(), ymax.max())
        corners = ((minx, miny), (maxx, maxy))
        self.update_datalim(corners)
        self.autoscale_view()
    return lines
