Pandas箱线图散点偏移问题求助:如何正确显示单个数据点
解决Pandas箱线图上散点偏移的问题
问题原因
df.boxplot绘制的箱线图,每个箱线的x轴位置是从1开始的整数(第一列对应x=1,第二列对应x=2,依此类推),但直接用列名columns作为plt.scatter的x参数时,matplotlib会把列名当作分类变量,默认从0开始分配x位置,导致散点整体左移一个单位。
修复方法
方法1:手动指定散点x轴位置
生成从1开始的整数序列对应箱线的位置,替换columns作为x参数:
df_encoded.boxplot(column=columns, rot=90, fontsize=15) newdata = pd.DataFrame(ndarrX_train[0].reshape(1,-1), columns=columns) # 生成对应箱线位置的x坐标(从1开始) x_positions = range(1, len(columns)+1) plt.scatter(x_positions, newdata.values.flatten(), c='r') plt.show()
方法2:从箱线图坐标轴提取精准位置
直接从箱线图的坐标轴对象中获取每个箱线的中心位置,适配性更强:
axes = df_encoded.boxplot(column=columns, rot=90, fontsize=15) newdata = pd.DataFrame(ndarrX_train[0].reshape(1,-1), columns=columns) # 获取每个箱线的中心x坐标 box_positions = [box.get_x() + box.get_width()/2 for box in axes.artists] plt.scatter(box_positions, newdata.values.flatten(), c='r') plt.show()
关键说明
newdata.values.flatten()是将单行DataFrame转为一维数组,匹配scatter的y参数格式。- 两种方法都能让散点精准对应到对应列的箱线正上方。
内容的提问来源于stack exchange,提问作者nima
相关产品推荐
相关产品推荐

