def _make_barbs(self, u, v, nflags, nbarbs, half_barb, empty_flag, length,<EOL>pivot, sizes, fill_empty, flip):
<EOL>spacing = length * sizes.get('<STR_LIT>', <NUM_LIT>)<EOL>full_height = length * sizes.get('<STR_LIT>', <NUM_LIT>)<EOL>full_width = length * sizes.get('<STR_LIT:width>', <NUM_LIT>)<EOL>empty_rad = length * sizes.get('<STR_LIT>', <NUM_LIT>)<EOL>pivot_points = dict(tip=<NUM_LIT:0.0>, middle=-length/<NUM_LIT>)<EOL>if flip: full_height = -full_height<EOL>endx = <NUM_LIT:0.0><EOL>endy = pivot_points[pivot.lower()]<EOL>angles = -(ma.arctan2(v, u) + np.pi/<NUM_LIT:2>)<EOL>circ = CirclePolygon((<NUM_LIT:0>,<NUM_LIT:0>), radius=empty_rad).get_verts()<EOL>if fill_empty:<EOL><INDENT>empty_barb = circ<EOL><DEDENT>else:<EOL><INDENT>empty_barb = np.concatenate((circ, circ[::-<NUM_LIT:1>]))<EOL><DEDENT>barb_list = []<EOL>for index, angle in np.ndenumerate(angles):<EOL><INDENT>if empty_flag[index]:<EOL><INDENT>barb_list.append(empty_barb)<EOL>continue<EOL><DEDENT>poly_verts = [(endx, endy)]<EOL>offset = length<EOL>for i in range(nflags[index]):<EOL><INDENT>if offset != length: offset += spacing / <NUM_LIT><EOL>poly_verts.extend([[endx, endy + offset],<EOL>[endx + full_height, endy - full_width/<NUM_LIT:2> + offset],<EOL>[endx, endy - full_width + offset]])<EOL>offset -= full_width + spacing<EOL><DEDENT>for i in range(nbarbs[index]):<EOL><INDENT>poly_verts.extend([(endx, endy + offset),<EOL>(endx + full_height, endy + offset + full_width/<NUM_LIT:2>),<EOL>(endx, endy + offset)])<EOL>offset -= spacing<EOL><DEDENT>if half_barb[index]:<EOL><INDENT>if offset == length:<EOL><INDENT>poly_verts.append((endx, endy + offset))<EOL>offset -= <NUM_LIT> * spacing<EOL><DEDENT>poly_verts.extend([(endx, endy + offset),<EOL>(endx + full_height/<NUM_LIT:2>, endy + offset + full_width/<NUM_LIT:4>),<EOL>(endx, endy + offset)])<EOL><DEDENT>poly_verts = transforms.Affine2D().rotate(-angle).transform(<EOL>poly_verts)<EOL>barb_list.append(poly_verts)<EOL><DEDENT>return barb_list<EOL>
This function actually creates the wind barbs.  *u* and *v*
are components of the vector in the *x* and *y* directions,
respectively.

*nflags*, *nbarbs*, and *half_barb*, empty_flag* are,
*respectively, the number of flags, number of barbs, flag for
*half a barb, and flag for empty barb, ostensibly obtained
*from :meth:`_find_tails`.

*length* is the length of the barb staff in points.

*pivot* specifies the point on the barb around which the
entire barb should be rotated.  Right now, valid options are
'head' and 'middle'.

*sizes* is a dictionary of coefficients specifying the ratio
of a given feature to the length of the barb. These features
include:

    - *spacing*: space between features (flags, full/half
       barbs)

    - *height*: distance from shaft of top of a flag or full
       barb

    - *width* - width of a flag, twice the width of a full barb

    - *emptybarb* - radius of the circle used for low
       magnitudes

*fill_empty* specifies whether the circle representing an
empty barb should be filled or not (this changes the drawing
of the polygon).

*flip* is a flag indicating whether the features should be flipped to
the other side of the barb (useful for winds in the southern
hemisphere.

This function returns list of arrays of vertices, defining a polygon for
each of the wind barbs.  These polygons have been rotated to properly
align with the vector direction.