Сгруппируйте по категориям и постройте каждую строку отдельно.
import numpy as np
import matplotlib.pyplot as plt
def cat_horizontal_plot(data, category, numeric, ax=None):
ax = ax or plt.gca()
for cat, num in data.groupby(category):
ax.plot(np.sort(num[numeric].values), [cat]*len(num),
marker="o", mec="k", mfc="none", linestyle="-", color="k")
ax.set_xlabel(numeric)
ax.set_ylabel(category)
ax.margins(y=0.4)
ax.figure.tight_layout()
Используйте его как
import seaborn as sns
tips = sns.load_dataset('tips')
cat_horizontal_plot(tips, "sex", "tip")
plt.show()