matplotlib无法在boxplot中绘制散点数据

时间:2019-03-12 03:53:08

标签: python-3.x matplotlib plot

我正在尝试遵循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()

此代码产生以下图像 enter image description here 如您所见,问题是最后一个框不包含数据的分散点。我尝试更改绘制绘图的顺序(即先绘制散点数据,然后绘制箱线图),但这似乎没有任何效果。

1 个答案:

答案 0 :(得分:1)

问题是pandasmatplotlib创建的分类轴不兼容。熊猫在索引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)

enter image description here