marker color handling: line and marker designations

It raises larger API questions. From the standpoint of

    > user-level code readability, the present array of marker and
    > line identifiers (inherited from Matlab) is not good. For
    > example, why should '-' mean a solid line, but '_' means a
    > horizontal line marker? What is the difference between '^'
    > and '2', and how on earth is anyone reading the code
    > supposed to know what '2' means? The only justification I
    > can see for the 1- and 2-character codes is their
    > convenience in interactive use for things like
    > "plot(x,y,'g.'". I would not want this to go away, but for
    > non-interactive coding I think longer names, typically
    > corresponding to the name of the function that generates the

I think for interactive use it is important to keep these short
characters though you are right, for some of the more arcane ones like
1,2,3,4 it makes no sense since there is no mnemonic. But I see no
harm in keeping them for interactive users

    > This needs either some broader discussion, or a command
    > decision by John along the lines of "Forget it; it's OK the
    > way it is, or it is too late to make any change in this part
    > of the API."

As you suggest, what we need to provide is an easy way for people to
use long readable names. The easiest way is in set_marker and
set_linestyle to do something like (untested sketch)

    def set_linestyle(self, linestyle):
        funcname = '_draw_%s'%linestyle
        func = getattr(self, funcname, None)
        if callable(func):
             self._lineFunc = func

and ditto for set_marker while still supporting the old mnemonics.

We can then advertise any of names available as values in the
Line2D._lineStyles and Line2D._markers dictionaries as legitimate
values for the linestyle and marker properties. Extra credit for
auto-updating the docstring by parsing the dictionary values.

In [1]: from matplotlib.lines import Line2D

In [2]: print [name[6:] for name in Line2D._markers.values() if
['tickleft', 'tickright', 'tickup', 'tickdown', 'nothing', 'nothing',
'plus', 'pixel', 'point', 'tri_down', 'tri_left', 'tri_up',
'tri_right', 'triangle_left', 'triangle_right', 'nothing', 'diamond',
'hexagon2', 'hline', 'triangle_up', 'thin_diamond', 'hexagon1',
'circle', 'pentagon', 'square', 'triangle_down', 'x', 'vline']