It seems complicated, but gives you what you want. Suggestions are welcome. I use ax.get_legend_handles_labels() to get the markers and use tuple(handle.get_facecolor()[0]) to get the matplotlib color tuple. Made an example with a really simple diffused pattern:
Edit:
As ImportanceOfBeingErnest pointed out in the answer:
leg.legendHandles will return legend handles;- A list, instead of a tuple, can be used to assign matplotlib color.
Codes are simplified as:
import matplotlib.pyplot as plt from numpy.random import rand fig, ax = plt.subplots() for color in ['red', 'green', 'blue']: x, y = rand(2, 10) ax.scatter(x, y, c=color, label=color) leg = ax.legend() for handle, text in zip(leg.legendHandles, leg.get_texts()): text.set_color(handle.get_facecolor()[0]) plt.show()
I got: 
source share