Проблема в том, что категориальные оси, созданные pandas
и matplotlib
, несовместимы. Панды упорядочивают категории по индексам 1,2,...
, а matplotlib использует 0,1,...
. Лучшее решение состоит в том, чтобы использовать только один инструмент для построения графиков (либо все панды, либо все matplotlib), но если вам нужно смешать и то, и другое, то вы должны соответственно отрегулировать координаты оси x:
tips = sns.load_dataset('tips')
axes = tips.boxplot(column="tip", by="day")
axes.set_title("DOW vs Data")
axes.set_xlabel("DOW")
axes.set_ylabel("Data")
for i,day in enumerate(["Thur", "Fri", "Sat", "Sun"]):
y = tips.loc[tips["day"] == day, "tip"]
x = np.repeat(i+1, len(y)) # adjust the x data so that Thur will correspond to coordinate 1, Fri to 2, etc
axes.scatter(x, y, color='r', alpha=0.3)
