Matplotlib資料視覺化基礎

東血發表於2022-07-01

Matplotlib 可能是 Python 2D-繪圖領域使用最廣泛的套件。它能讓使用者很輕鬆地將資料圖形化,並且提供多樣化的輸出格式。這裡將會探索 matplotlib 的常見用法。

image-20220701100342629

1.引例

In [ ]:

import matplotlib.pyplot as plt
import numpy as np

In [ ]:

image-20220701100445914

#建立畫布,指定畫布大小
plt.figure(figsize=(4,4))

Out[ ]:

<Figure size 288x288 with 0 Axes>
<Figure size 288x288 with 0 Axes>

In [ ]:

# 生成0-9的十個整數資料
np.arange(10)

Out[ ]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [ ]:

image-20220701100501993

x=np.arange(10)
# 設定影像標題
plt.title('lines')
#繪製圖線一
plt.plot(x,np.sin(x))
#繪製圖線二
plt.plot(x,np.cos(x))
#設定區分圖線標誌
plt.legend(['sin','cos'])
#儲存圖片
plt.savefig('./tmp/tmp.png')
#展示圖片
plt.show()

img

2.資料匯入

In [ ]:

data=np.load('./data/國民經濟核算季度資料.npz',allow_pickle=True)

In [ ]:

data.files

Out[ ]:

['columns', 'values']

In [ ]:

data['columns']

Out[ ]:

array(['序號', '時間', '國內生產總值_當季值(億元)', '第一產業增加值_當季值(億元)', '第二產業增加值_當季值(億元)',
       '第三產業增加值_當季值(億元)', '農林牧漁業增加值_當季值(億元)', '工業增加值_當季值(億元)',
       '建築業增加值_當季值(億元)', '批發和零售業增加值_當季值(億元)', '交通運輸、倉儲和郵政業增加值_當季值(億元)',
       '住宿和餐飲業增加值_當季值(億元)', '金融業增加值_當季值(億元)', '房地產業增加值_當季值(億元)',
       '其他行業增加值_當季值(億元)'], dtype=object)

In [ ]:

data['values']

Out[ ]:

array([[1, '2000年第一季度', 21329.9, ..., 1235.9, 933.7, 3586.1],
       [2, '2000年第二季度', 24043.4, ..., 1124.0, 904.7, 3464.9],
       [3, '2000年第三季度', 25712.5, ..., 1170.4, 1070.9, 3518.2],
       ...,
       [67, '2016年第三季度', 190529.5, ..., 15472.5, 12164.1, 37964.1],
       [68, '2016年第四季度', 211281.3, ..., 15548.7, 13214.9, 39848.4],
       [69, '2017年第一季度', 180682.7, ..., 17213.5, 12393.4, 42443.1]],
      dtype=object)

3.繪製散點圖

image-20220701100538399

In [ ]:

#繪製散點圖
plt.scatter(range(69),data['values'][:,2])
plt.show()

img

In [ ]:

#多種資料散點圖
for i in [3,4,5]:
    plt.scatter(range(69),data['values'][:,i])
plt.legend(['1','2','3'])
plt.show()

img

4.繪製折線圖

In [ ]:

#繪製折線圖
plt.plot(range(69),data['values'][:,2])
plt.show()

img

In [ ]:

#多種資料繪製折線圖
l=['r','g','b'] #顏色
m=['o','*','D'] #標記樣式
for j,i in enumerate([3,4,5]):
    plt.plot(range(69),data['values'][:,i],c=l[j],marker=m[j],alpha=0.5)
plt.legend(['1','2','3'])
plt.show()

img

5.繪製直方圖

image-20220701100622144

In [ ]:

#直方圖
data['values'][68,3:6]

Out[ ]:

array([8654.0, 70004.5, 102024.2], dtype=object)

In [ ]:

#賦值繪圖資料
num=data['values'][68,3:6]

In [ ]:

#繪製直方圖新增資料
plt.bar(range(len(num)),num)
#給x軸標註刻度和取值
plt.xticks(range(len(num)),['1','2','3'])
plt.show()

img

6.繪製餅圖

image-20220701100658753

In [ ]:

#設定繪圖區域為正方形
plt.figure(figsize=(4,4))
plt.pie(num,autopct='%.2f %%',explode=[0.1,0,0],labels=['1','2','3'],labeldistance=1.4)
plt.show()

img

7.繪製箱線圖

In [ ]:

#設定單個資料繪製箱線圖
num=data['values'][:,3]
plt.boxplot(num)
plt.show()

img

In [ ]:

#設定多個箱線圖繪製在一張圖中
num=(list(data['values'][:,3]),list(data['values'][:,4]),list(data['values'][:,5]))
plt.boxplot(num)
plt.show()

img

5.參考文章

Matplotlib

【創作不易,望點贊收藏,若有疑問,請留言,謝謝】

相關文章