Вы можете использовать matplotlib.pyplot.hlines
с некоторым учетом ширины и расположения линий. Вот пример, использующий набор данных seaborn tips
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
tips = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=tips)
labels = [e.get_text() for e in plt.gca().get_xticklabels()]
ticks = plt.gca().get_xticks()
w = 0.1
for day, idx in enumerate(labels):
idx = labels.index(day)
plt.hlines(tips[tips['day'] == day]['total_bill'].mean(), ticks[idx]-w, ticks[idx]+w)
plt.show()
Некоторые пояснения
labels = [e.get_text() for e in plt.gca().get_xticklabels()]
Экстракты текст из меток, который автоматически генерируется sns.stripplot
, это более полезно, чем tips['day'].unique()
, поскольку порядок меток не обязательно соответствует порядку, возвращенному из tips['day'].unique
. Это связано с тем, что если аргумент order
не указан, порядок будет
[...] выводиться из объектов данных.
plt.hlines(tips[tips['day'] == day]['total_bill'].mean(), ticks[idx]-w, ticks[idx]+w)
Dr aws горизонтальные линии длиной w*2
вокруг центра "полосы" и на высоте среднего значения столбца 'total_bill'
, где значение 'day'
этой строки равно текущий день.