1.今天做画箱线图需求,发现有个问题,同事给我的图,没有离群点,而我用pandas,matplotlib画的都有离群点,于是有点懵逼,不知道哪个对,于是只能一通搜索,后来发现这块确实有分歧,博客上搜的一个图,对于箱线图的解释,这里面是有异常值的解释的,原来我看,貌似没有异常值这个,只有最大最小值,但是目前绘图库里貌似都是新的算法和解释了。
关于异常值的判断标准
某些文档中,异常值分为 温和异常值(mild outliers) 和 极端异常值(extreme outliers)
「Q1-1.5IQR」也被称为内下限值,「Q3+1.5IQR」也被称为内上限值;
「Q1-3IQR」也被称为外下限值,「Q3+3IQR」也被称为外上限值;
数据落在内限值和外限值之间则称为温和异常值,用"O"标识;
数据落在外限值之外则称为极端异常值,用"*"标识;
非特别说明,温和异常值,极端异常值不予区分,统称异常值
IQR:75%分位数(Q3)-25%分位数(Q1)也就是箱体长度。
现在的绘图算法由于都加入了异常值判断,所以上下限不再是最大最小值,而是叫最大最小观测值!!!
2.用pandas循环绘图,坐标不随数据的改变而改变。需求是这样的,我循环一个dataframe,然后用我需要的每一个列绘制一个箱线图,但是绘完图之后发现纵坐标都是10000,我的列里面有的只有0.6这样的数量级,导致绘出的图没法看。解决方法,默认情况下,所有的图都绘制再默认的画布上,也就是说是一块画布,多个图,这样,图多了就重合在一起了,解决方法是,一个画布一个图,也就是说在每次循环的时候都创建一块新画布就ok了。
- def box_plt(self,a):
- self.need_data[a]['myindex'] = np.arange(0,self.need_data[a].shape[0])
- i = 1
- for col in self.exists_list:
- #创建一块画布,不需要用变量接收
- plt.figure(i)
- print(self.need_data[a][col])
- ax = self.need_data[a].boxplot(column=[col])
- ax.get_figure().savefig('./icon/' + col + '.png')
- i += 1