1. 程式人生 > >Python實現箱形圖的繪製

Python實現箱形圖的繪製

Python實現直方圖的繪製:

說明:程式碼執行環境:Win10+Python3+jupyter notebook

箱形圖簡介:

因為箱形圖是基於五數概括法的圖形彙總,在介紹箱形圖前,先簡單介紹一下五數概括法。

五數概括法使用下面五個數來彙總資料:

(1)最小值

(2)第一四分位數(Q1)

(3)中位數(Q2)

(4)第三四分位數(Q3)

(5)最大值

而箱形圖就是五數概括法的圖形表示。如下圖所示:

(圖片來源:https://blog.csdn.net/weixin_39501270/article/details/77369597

箱形圖的應用:

(1)可以作為一種檢測異常值的方法;

(2)用於多組資料的圖形彙總,便於對各組資料進行直觀比較分析。

箱形圖的繪製方法主要有:

方法1:利用pandas包中的Series.plot()、DataFrame.plot()或DataFrame.boxplot()方法;

方法2:利用seaborn包中的cataplot()或者boxplot(),其中seaborn.boxplot()是seaborn.cataplot()的引數kind='box'時的一種情況;

方法3:利用matplotlib包中axes物件的boxplot()方法。

 

匯出需要的各種包,並準備好資料:

%matplotlib notebook
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as 

tips = pd.read_csv('examples/tips.csv')
tips['tip_pct'] = tips['tip'] / (tips['total_bill'] - tips['tip'])

tips的表結構為:

方法1具體示例:

Series.plot()示例:

fig,axes = plt.subplots()
tips['tip_pct'][tips.tip_pct < 0.5].plot(kind='box',ax=axes)
axes.set_ylabel('values of tip_pct')
plt.savefig('p1.png')    # 將繪製的圖形儲存為p1.png

上述程式碼繪製的圖形為:

Series.plot()的用法具體參考:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.plot.html#pandas.Series.plot

DataFrame.plot()示例:

fig,axes = plt.subplots(1,4)
color = dict(boxes='DarkGreen', whiskers='DarkOrange',
              medians='DarkBlue', caps='Red')
# boxes表示箱體,whisker表示觸鬚線
# medians表示中位數,caps表示最大與最小值界限

tips.plot(kind='box',ax=axes,subplots=True,
                              title='Different boxplots',color=color,sym='r+')
# sym引數表示異常值標記的方式

axes[0].set_ylabel('values of total_bill')
axes[1].set_ylabel('values of tip')
axes[2].set_ylabel('values of size')
axes[3].set_ylabel('values of tips_pct')

plt.subplots_adjust(wspace=1,hspace=1)  # 調整子圖之間的間距
plt.savefig('p2.png')    # 將繪製的圖片儲存為p2.png

上述程式碼繪製的圖形為:

DataFrame.plot()的用法具體參考:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html

DataFrame.boxplot()示例:

fig,axes = plt.subplots()
tips.boxplot(column='tip_pct',by=['smoker','time'],ax=axes)
# column引數表示要繪製成箱形圖的資料,可以是一列或多列
# by引數表示分組依據

axes.set_ylabel('values of tip_pct')
plt.savefig('p3.png')   # 將繪製的圖形儲存為p3.png

上述程式碼繪製的圖形為:

DataFrame.boxplot()的用法具體參考:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.boxplot.html?highlight=dataframe%20boxplot#pandas.DataFrame.boxplot

方法2具體示例:

seaborn.cataplot()示例:

sns.catplot(x='tip_pct',y='day',hue='smoker',kind='box',
           data=tips[tips.tip_pct < 0.5])   
# hue表示分組的依據
  
plt.savefig('p4.png')    # 將繪製的圖形儲存為p4.png

上述程式碼繪製的圖形為:

seaborn.catplot()的用法具體參考:

http://seaborn.pydata.org/generated/seaborn.catplot.html?highlight=seaborn%20catplot#seaborn.catplot

seaborn.boxplot()示例:

 

 

fig,axes = plt.subplots()
sns.boxplot(x='day',y='tip_pct',hue='smoker',
            data=tips[tips.tip_pct < 0.5],orient='v',ax=axes)
# orient引數表示箱形圖的方向

axes.set_title('Boxplots grouped by smoker')
plt.savefig('p5.png')    # 將繪製的圖形儲存為p5.png

上述程式碼繪製的圖形為:

seaborn.boxplot()的用法具體參考:

http://seaborn.pydata.org/generated/seaborn.boxplot.html#seaborn.boxplot

方法3具體示例:

axes.boxplot()示例:

fig,axes = plt.subplots()
axes.boxplot(x=tips.tip_pct,sym='rd',positions=[2]) 
# sym引數表示異常值的標記方式
# positions表示箱形圖的位置標籤

axes.set_xlabel('tip_pct')
plt.savefig('p6.png')    # 將繪製的圖形儲存為p6.png

上述程式碼繪製的圖形為:

axes.boxplot()的用法具體參考:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.boxplot.html?highlight=axes%20boxplot#matplotlib.axes.Axes.boxplot

其他參考資料:

《Python for Data Analysis》第二版

《商務與經濟統計》第十三版

pandas、matplotlib、seaborn官方文件