[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图

目录

  • 九、箱形图
    • 1、plt.plot.box()
    • 2、plt.boxplot()
    • 3、分组绘图

九、箱形图

箱形图又称为盒须图、盒式图或箱线图,它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。
[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第1张图片

  • 中位数:按顺序排列的一组数据中居于中间位置的数
  • 上四分位数Q3:一组数据排序后处于75%((1+n)/4*3)位置上的值
  • 下四分位数Q1:一组数据排序后处于25%((1+n)/4)位置上的值
  • 四分位距IQR=Q3-Q1
  • 内限:最大值Q3+1.5IQR,最小值Q1-1.5IQR
  • 外限:最大值Q3+3IQR,最小值Q1-3IQR
  • 异常值:内限与外限之间,中度异常,在外限以外,极度异常

箱形图的绘制步骤:

  • 画数轴:度量单位大小和数据批的单位一致,起点比最小值稍小,长度比该数据批的全距稍长;
  • 画一个矩形盒:两端分别对应数据批的上下四分位数(Q3和Q1)。在矩形盒内部中位数位置画中位线;
  • 画内限和外限:箱型图一般没有标出内限和外限;
  • 画上边缘和下边缘:从矩形盒两端边向外各画一条线段直到不是异常值的最远点,表示该批数据正常值的分布区间;
  • 用"〇"标出中度异常值,用"*"标出极度异常值;相同值的数据点并列标出在同一数据线位置上。

1、plt.plot.box()

  • vert:是否垂直,默认True
  • positions:占位

箱形图着色:

  • boxes:箱线的颜色
  • whiskers:竖线的颜色
  • medians:中位线的颜色
  • caps:边缘线的颜色
df = pd.DataFrame(np.random.rand(10, 5), columns = list("ABCDE"))

color = dict(boxes = 'DarkGreen', whiskers = 'DarkOrange', medians = 'DarkBlue', caps = 'Gray')

df.plot.box(ylim = [0, 1.2],
            color = color,
            positions = [1, 4, 5, 6, 8])

[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第2张图片

df.plot.box(vert = False) # 垂直否

[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第3张图片

2、plt.boxplot()

plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None, hold=None, data=None)

  • x: 数据
  • notch: 默认False,生成一个矩形箱形图;如果为True,将生成一个带缺口的箱形图,缺口表示中位数附近的置信区间(CI)
  • sym: 异常点形状,参考marker
  • vert: 是否垂直,默认True
  • whis: 默认1.5,表示上须Q3 + whis * IQR,下须Q1 - whis * IQR
    设置区间如[5,95],代表强制上下边缘为数据95%和5%位置
    字符串"range",将晶须强制为数据的最小值和最大值
  • positions: 占位
  • patch_artist: 箱体是否进行颜色填充,默认False
  • meanline: 如果为True且showmeans为True,则将画出均值线,与中位线平行
  • showmeans: 显示算数平均值
  • showcaps: 是否显示上下边缘线
  • showbox: 是否显示箱体,不显示则填充颜色也不显示
  • showfliers: 是否显示异常值
  • return_type = ‘dict’,返回类型为字典
df = pd.DataFrame(np.random.rand(10, 5), columns = list("ABCDE"))

plt.figure(figsize = (10, 4))

f = df.boxplot(notch = False, # 箱体是否带缺口
               sym = 'o', # 异常点形状,参考marker
               vert = True, # 是否垂直
               whis = 1.5,
               patch_artist = True,  # 箱体是否进行颜色填充
               meanline = True, # 如果为True且showmeans为True,则将画出均值线,与中位线平行
               showmeans = True, # 显示算数平均值
               showcaps = True, # 是否显示上下边缘线
               showbox = True, # 是否显示箱体,不显示则填充颜色也不显示
               showfliers = True, # 是否显示异常值
               return_type ='dict') # 返回类型为字典

[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第4张图片
boxes:箱体
medians:中位线
means:均值线
whiskers:竖线
caps:边缘线
fliers:异常值

# print(f.keys())
# dict_keys(['boxes', 'fliers', 'medians', 'caps', 'whiskers', 'means'])

for box in f['boxes']:
    box.set(edgecolor = 'r', facecolor = 'b', linewidth = 1, alpha = 0.5)
for median in f['medians']:
    median.set(color = 'DarkBlue', linewidth = 2)
for mean in f['means']:
    mean.set(color = 'y', linewidth = 2)
for whisker in f['whiskers']:
    whisker.set(color = 'g', linewidth = 0.5, linestyle = '-')
for cap in f['caps']:
    cap.set(color = 'gray', linewidth = 2)
for flier in f['fliers']:
    flier.set(marker = 'o', alpha = 0.5) # color为箱子颜色?

[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第5张图片

3、分组绘图

df = pd.DataFrame(np.random.rand(6, 2), columns = ['Col1', 'Col2'])
df['X'] = pd.Series(['A', 'A', 'A', 'B', 'B', 'B'])
df['Y'] = pd.Series(['A', 'B', 'B', 'B', 'A', 'A'])
'''
       Col1      Col2  X  Y
0  0.134612  0.451295  A  A
1  0.131603  0.922581  A  B
2  0.532679  0.247002  A  B
3  0.863306  0.736274  B  B
4  0.999598  0.052141  B  A
5  0.292755  0.493295  B  A
'''

df.boxplot(by = 'X')

df.boxplot(by = ['X', 'Y'], column = ['Col2'])

[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第6张图片
[三] 3 图表绘制工具:Matplotlib -- 图表绘制之箱形图_第7张图片

你可能感兴趣的:(数据分析,matplotlib,箱形图,四分位数,内限,boxplot)