箱形图和小提琴图
箱形圖(Box-plot)
又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖,因形狀如箱子而得名。它能顯示出一組數據的最大值、最小值、中位數、及上下四分位數。
箱形圖繪制須使用常用的統計量,能提供有關數據位置和分散情況的關鍵信息,尤其在比較不同的母體數據時更可表現其差異。
箱形圖的繪制主要包含六個數據節點,需要先將數據從大到小進行排列,然后分別計算出它的上邊緣,上四分位數,中位數,下四分位數,下邊緣,還有一個異常值。
計算過程:
計算上四分位數(Q3),中位數,下四分位數(Q1)
計算上四分位數和下四分位數之間的差值,即四分位數差(IQR, interquartile range)Q3-Q1
繪制箱線圖的上下范圍,上限為上四分位數,下限為下四分位數。在箱子內部中位數的位置繪制橫線。
大于上四分位數1.5倍四分位數差的值,或者小于下四分位數1.5倍四分位數差的值,劃為異常值(outliers)。
異常值之外,最靠近上邊緣和下邊緣的兩個值處,畫橫線,作為箱線圖的觸須。
極端異常值,即超出四分位數差3倍距離的異常值,用實心點表示;較為溫和的異常值,即處于1.5倍-3倍四分位數差之間的異常值,用空心點表示。
為箱線圖添加名稱,數軸等
分位數
根據其將數列等分的形式不同可以分為中位數,四分位數,十分位數、百分位數等等。四分位數作為分位數的一種形式,在統計中有著十分重要的意義和作用。
四分位數(Quartile)也稱四分位點,是指在統計學中把所有數值由小到大排列并分成四等份,處于三個分割點位置的數值。它是一組數據排序后處于25%和75%位置上的值。四分位數是通過3個點將全部數據等分為4部分,其中每部分包含25%的數據。很顯然,中間的四分位數就是中位數,因此通常所說的四分位數是指處在25%位置上的數值(稱為下四分位數)和處在75%位置上的數值(稱為上四分位數)。與中位數的計算方法類似,根據未分組數據計算四分位數時,首先對數據進行排序,然后確定四分位數所在的位置,該位置上的數值就是四分位數。與中位數不同的是,四分位數位置的確定方法有幾種,每種方法得到的結果會有一定差異,但差異不會很大。
四分位數有三個分位點,第一個四分位數就是通常所說的四分位數,稱為下四分位數,第二個四分位數就是中位數,第三個四分位數稱為上四分位數,分別用Q1、Q2、Q3表示。
第一四分位數 (Q1),又稱“較小四分位數”,等于該樣本中所有數值由小到大排列后第25%的數字。
第二四分位數 (Q2),又稱“中位數”,等于該樣本中所有數值由小到大排列后第50%的數字。
第三四分位數 (Q3),又稱“較大四分位數”,等于該樣本中所有數值由小到大排列后第75%的數字。
第三四分位數與第一四分位數的差距又稱四分位距(InterQuartile Range,IQR)。
確定四分位數的位置的方法有多種,如
Q1位置 = (n+1) * 0.25
Q2位置 = (n+1) * 0.5
Q3位置 = (n+1) * 0.75
其中n表示項數
另一種確定方法
Q1位置 = 1 + (n-1) * 0.25
Q2位置 = 1 + (n-1) * 0.5
Q3位置 = 1 + (n-1) * 0.75
Demo
最簡盒形圖
import matplotlib.pyplot as plt
import numpy as np
all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]
fig = plt.figure(figsize=(8, 6))
plt.boxplot(all_data,
notch=False, # box instead of notch shape
sym='rs', # red squares for outliers
vert=True) # vertical box aligmnent
plt.xticks([y + 1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')
t = plt.title('Box plot')
plt.show()
自定義顏色填充盒形圖
import matplotlib.pyplot as plt
import numpy as np
all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]
fig = plt.figure(figsize=(8, 6))
bplot = plt.boxplot(all_data,
notch=False, # notch shape
vert=True, # vertical box aligmnent
patch_artist=True) # fill with color
colors = ['pink', 'lightblue', 'lightgreen']
for patch, color in zip(bplot['boxes'], colors):
patch.set_facecolor(color)
plt.xticks([y + 1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')
t = plt.title('Box plot')
plt.show()
小提琴圖
小提琴圖 (Violin Plot)是用來展示多組數據的分布狀態以及概率密度。這種圖表結合了箱形圖和密度圖的特征,主要用來顯示數據的分布形狀。跟箱形圖類似,但是在密度層面展示更好。在數據量非常大不方便一個一個展示的時候小提琴圖特別適用。
小提琴圖概念圖
Demo
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(figsize=(12, 5))
all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]
axes.violinplot(all_data,
showmeans=False,
showmedians=True
)
axes.set_title('violin plot')
# adding horizontal grid lines
axes.yaxis.grid(True)
axes.set_xticks([y + 1 for y in range(len(all_data))], )
axes.set_xlabel('xlabel')
axes.set_ylabel('ylabel')
plt.setp(axes, xticks=[y + 1 for y in range(len(all_data))],
xticklabels=['x1', 'x2', 'x3', 'x4'],
)
plt.show()
參考文獻
百度百科-四分位數
python繪制盒狀圖和小提琴圖
箱形圖繪制-水平,并列等
箱形圖與小提琴圖概念介紹
seaborn小提琴圖
總結
- 上一篇: DevExpress Skins<
- 下一篇: SAP CRM产品主数据工作流相关调试