If all you are looking for is a circular marker in the legend (as opposed to strictly using proxy artists), then I suggest trying something like:
line1 = Line2D(range(1), range(1), color="white", marker='o', markerfacecolor="red")
line2 = Line2D(range(1), range(1), color="white", marker='o',markerfacecolor="green")
line3 = Line2D(range(1), range(1), color="white", marker='o',markersize=5, markerfacecolor="slategray")
line4 = Line2D(range(1), range(1), color="white", marker='o',markersize=10,markerfacecolor="slategray")
plt.legend((line1,line2,line3,line4),('Thing 1','Thing 2', 'Thing 3', 'Thing 4'),numpoints=1, loc=1)
This shows you circles of different color and sizes, where the 2D line that is drawn is white (hence color="white"). If you don't want the circles filled in, for example, set markeredgecolor="green" and markerfacecolor="white".
Further tweaks
- If you don't have a white background, or if the line intersects with the grid in the background,
color="white" will still show the line. linewidth=0 will completely hide the line.
- Use the
handletextpad keyword argument for plt.legend to reduce the space between the circle and the label. The value can also be negative, e.g. handletextpad=-0.3.
- If you are using
seaborn palettes, you can set the individual marker face colors by indexing the palette. E.g. markerfacecolor=sns.color_palette("cubehelix", 3)[0]