如何用python的畫幾組資料量不同的boxplot(箱線圖)
阿新 • • 發佈:2019-01-31
使用pandas裡的dataframe資料結構存放待顯示的資料。
dataframe和Series的知識不再講解,可以看這個博文。
如果希望顯示的各個資料列表中,資料長度不一致,可以先用Series函式轉換為Series資料,再儲存到dataframe中,對應index的value值若不存在則為NaN
正常情況下,若各組資料長度一致,則dataframe長這樣:
0 1
0 1 5
1 2 6
2 3 7
3 4 8
如果長度不一致,長這樣:
0 1
0 1 5
1 2 6
2 3 7
3 NaN 8
後面直接用boxplot就可以
程式碼原型參考了 這篇部落格
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
def list_generator(mean, dis, number): # 封裝一下這個函式,用來後面生成資料
return np.random.normal(mean, dis * dis, number) # normal分佈,輸入的引數是均值、標準差以及生成的數量
# 我們生成四組資料用來做實驗,資料量分別為70-100
list1 = list_generator(0.8531 , 0.0956, 70)
list2 = list_generator(0.8631, 0.0656, 80)
list3 = list_generator(0.8731, 0.1056, 90)
list4 = list_generator(0.8831, 0.0756, 100)
s1 = pd.Series(np.array(list1))
s2 = pd.Series(np.array(list2))
s3 = pd.Series(np.array(list3))
s4 = pd.Series(np.array(list4))
# 把四個list匯入到pandas的資料結構中,dataframe
data = pd.DataFrame({"1" : s1, "2": s2, "3": s3, "4": s4})
data.boxplot() # 這裡,pandas自己有處理的過程,很方便哦。
plt.ylabel("ylabel")
plt.xlabel("xlabel") # 我們設定橫縱座標的標題。
plt.show()