(1)
箱線圖,又稱箱形圖(boxplot)或盒式圖,不同于一般的折線圖彬向、柱狀圖或餅圖等傳統(tǒng)圖表葵礼,只是數(shù)據(jù)大小、占比苛萎、趨勢等等的呈現(xiàn),其包含一些統(tǒng)計(jì)學(xué)的均值、分位數(shù)刀荒、極值等等統(tǒng)計(jì)量,因此棘钞,該圖信息量較大缠借,不僅能夠分析不同類別數(shù)據(jù)平均水平差異(需在箱線圖中加入均值點(diǎn)),還能揭示數(shù)據(jù)間離散程度宜猜、異常值泼返、分布差異等等。
在python中常用matplotlib的boxplot來繪制姨拥,最簡單繪制的如下:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(2) #設(shè)置隨機(jī)種子
df = pd.DataFrame(np.random.rand(5,4),
columns=['A', 'B', 'C', 'D'])#先生成0-1之間的5*4維度數(shù)據(jù)绅喉,再裝入4列DataFrame中
df.boxplot() #也可用plot.box()
plt.show()
從圖形可以看出,A叫乌、B柴罐、C、D四組數(shù)A憨奸、D數(shù)據(jù)較集中(大部分在上下四分位箱體內(nèi))革屠,但都有異常值,C的離散程度最大(最大值與最小值之間距離)排宰,以均值為中心似芝,B分布都有明顯右偏(即較多的值分布在均值的右側(cè)),A板甘、C則有明顯左偏党瓮。
(2)
從分析的角度來說,上面boxplot最初始圖形已經(jīng)夠用盐类,但是在matplotlib庫下boxplot函數(shù)中包含n多參數(shù)寞奸,涉及到對框的顏色及形狀、線段線型在跳、均值線枪萄、異常點(diǎn)的形狀大小等等設(shè)置,由于大多并不常用硬毕,用了幾個(gè)常用參數(shù)呻引,作圖如下:
df.boxplot(sym='r*',vert=False,patch_artist=True,meanline=False,showmeans=True)
plt.show()
其中,sym='r*',表示異常點(diǎn)的形狀吐咳,
vert=False逻悠,表示橫向還是豎向(True)元践,,
patch_artist=True,(上下四分位框內(nèi)是否填充,True為填充)
meanline=False,showmeans=True童谒,是否有均值線及其形狀单旁,meanline=True時(shí),均值線也像中位數(shù)線一樣是條紅色線段饥伊,這樣容易與中位數(shù)線混淆象浑。
另外,還有其他參數(shù)琅豆,比如notch表示中間箱體是否缺口愉豺,whis為設(shè)置數(shù)據(jù)的范圍,showcaps茫因、showbox是否顯示邊框蚪拦,可以參見
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.boxplot,如該網(wǎng)頁中圖形:
左上圖是默認(rèn)圖形冻押,中上驰贷、右上是顯示均值點(diǎn)及形狀,左下是是否顯示箱體邊框洛巢,中下是帶缺口的箱體括袒,右下是是否顯示異常值。
(3)
前邊說過稿茉,很多參數(shù)使用很少锹锰,但對于圖形來說,可能還能用到的就是美化狈邑,比如各條線的顏色城须,粗細(xì)程度等等。這里可用for循環(huán)來構(gòu)造米苹。
f=df.boxplot(sym='r*',patch_artist=True)
for box in f['boxes']:
# 箱體邊框顏色
box.set( color='#7570b3', linewidth=2)
# 箱體內(nèi)部填充顏色
box.set( facecolor = '#1b9e77' )
for whisker in f['whiskers']:
whisker.set(color='r', linewidth=2)
for cap in f['caps']:
cap.set(color='g', linewidth=3)
for median in f['medians']:
median.set(color='DarkBlue', linewidth=3)
for flier in f['fliers']:
flier.set(marker='o', color='y', alpha=0.5)
plt.show()
其中,boxes, 是25分位值和75分位值構(gòu)成的box,
medians, 是中位值的橫線, 每個(gè)median是一個(gè)Line2D對象
whiskers, 是指從box 到error bar之間的豎線.
fliers, 是指error bar線之外的離散點(diǎn).
caps, 是指error bar橫線.
means, 是均值的橫線,
(4)
還可以做子圖砰琢,如我們在最開始的DataFrame數(shù)據(jù)中加入分類數(shù)據(jù)列:
df['E'] = np.random.choice(['X', 'Y'], size=20)#加入以X蘸嘶、Y隨機(jī)分類的E列
print(df)
plt.figure()
df.boxplot(by='E')
plt.show()
這樣我們就可以比較,不同類別X陪汽、Y在同一列下的數(shù)據(jù)分布情況及其差異训唱。