Один из вариантов такой:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerTuple
x = np.arange(10)
y = x*0.2
#Plotting
l1, = plt.plot(x,y+0.0, 'bo', markersize='12', label='Hexadecane MD')
l2, = plt.plot(x,y+0.3, 'bo', markersize='12', markerfacecolor='none', label='Hexadecane Exp')
l3, = plt.plot(x,y+1.0, 'rs', markersize='12', label='Methyl Laurate MD')
l4, = plt.plot(x,y+1.3, 'rs', markersize='12', markerfacecolor='none', label='Methyl Laurate Exp')
l5, = plt.plot(x,y+2.0, '^', color='indigo', markersize='12', label='Mixture 1:1 MD')
l6, = plt.plot(x,y+2.3, '^', color='indigo', markersize='12', markerfacecolor='none',label='Mixture 1:1 Exp')
plt.legend(handles=[(l1, l2), (l3, l4), (l5, l6)],
labels=["Hexadecane", "Methyl Laurate", "Mixture 1:1"],
handler_map={tuple: HandlerTuple(ndivide=2)},
handlelength=3,
title="MD Exp ")
plt.show()
![enter image description here](https://i.stack.imgur.com/pfd8K.png)
Неправильное использование заголовка для "заголовка столбца" является грязным хаком. Но это быстро дает желаемый результат.