1. 程式人生 > >用excl匯入資料檔案並用matplotlib畫箱線圖和提琴圖

用excl匯入資料檔案並用matplotlib畫箱線圖和提琴圖

import matplotlib.pyplot as plt

import xlrd
import numpy as np
import time
one_time =time.time()

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
data = xlrd.open_workbook(r"E:\工作中的檔案\20181119蘇煥_資料分析\11-18日全國各個櫃機的預留使用率分佈情況.xlsx") #開啟excel
table = data.sheet_by_name("Sheet1")#讀sheet
nrows = table.nrows #獲得行數(返回的是行列值中最大的值)
columns = table.ncols
print('行數是:',nrows,'列數是:',columns)
#
first_time = time.time()
print('這是第一小段程式發生的時長:%d s'%(first_time-one_time))
result = []
for i in range(0,columns):
    result_ = []
    for j in range(0,nrows):

        if table.row_values(j)[i]: #這個很重要,因為讀取的行數是最大值,於是會有一些空值進來,所以讀取的時候得把這些空值個篩選掉。
            result_.append(table.row_values(j)[i])

    step_number = np.where(np.array(result_,dtype=float)>1,1,np.array(result_,dtype=float))
    result.append(np.array(step_number,dtype=float))


fig, axes = plt.subplots(nrows=1, ncols=2,constrained_layout=True)





# plot violin plot




axes[0].violinplot(result,
                   showmeans=False,
                   showmedians=True)
axes[0].set_title('小提琴圖')

# plot box plot
axes[1].boxplot(result)
axes[1].set_title('箱型圖')

# adding horizontal grid lines
for ax in axes:
    ax.yaxis.grid(True) #x座標軸的網格使用主刻度
    ax.set_xticks([0.5*(y + 1) for y in range(len(result))])
    # ax.set_xticks([1])

    ax.set_xlabel('日期')
    ax.set_ylabel('預留預約量使用率')

# add x-tick labels
plt.setp(axes, xticks=[x for x in range(1,9)],
         xticklabels=['11日','12日','13日','14日','15日','16日','17日','18日'])
plt.show()