我正在尝试遵循here所示的泰坦尼克号示例。到目前为止,这是我的代码
cat_df = DataFrame({"Data": data, "DOW": days_of_week})
axes = cat_df.boxplot(column="Data", by="DOW")
axes.set_title("DOW vs Data")
axes.set_xlabel("DOW")
axes.set_ylabel("Data")
for day in ["Fri", "Mon", "Thu", "Tue", "Wed"]:
y = cat_df.loc[cat_df["DOW"] == day, "Data"]
x = np.repeat(day, len(y))
axes.scatter(x, y, color='r', alpha=0.3)
plt.suptitle('')
plt.show()
此代码产生以下图像 如您所见,问题是最后一个框不包含数据的分散点。我尝试更改绘制绘图的顺序(即先绘制散点数据,然后绘制箱线图),但这似乎没有任何效果。
答案 0 :(得分:1)
问题是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)