iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
1
Data Technology

使用Python進行資料分析系列 第 20

[Day20]Matplotlib資料視覺化進階!

嗨,今天終於!終於!來到2/3了!(感動)
上一篇介紹了Matplotlib是如何做到讓資料變成折線圖,今天要說明如何結合pandasnumpy製作出其他樣式的資料圖表!

那我們就開始吧!(let's go!)
先import matplotlib:

import matplotlib.pyplot as plt

pie Chart

今天來介紹圓餅圖吧!
加入label:

labels = 'A','B','C','D','E','F'

設定每塊的大小:

size = [33,52,12,17,62,48]

要圓餅圖使用plt.pie()

plt.pie(size , labels = labels,autopct='%1.1f%%')

size與labels都是上面設定的資料,autopct='%1.1f%%'是用來顯示百分比。

為了要讓圓餅圖比例相等加上:

plt.axis('equal')

最後顯示:

plt.show()

Imgur

Separated

在pie裡面還有一個參數explode可以使用,我們直接來使用吧:
上面的程式碼新增:

separated = (.1,0,0,0,0,0)

上面幾個.1,0,0,0,0,0 分別為 'A','B','C','D','E','F',這是設定分開的數值(距離)。
修改plt.pie()的內容新增一個explode參數,變成:

plt.pie(size , labels = labels,autopct='%1.1f%%',explode=separated) 

接著show資料:
Imgur
就會看到A的部分分開了,也可以自行改變separated內的數字,看看改變了什麼!

With pandas

現在要加上我們之前講的pandas,來把pandas的資料做視覺化!

import matplotlib.pyplot as plt
import pandas as pd

先定義資料:

data = {'names':['a','b','c','d','e'],
        'jan':[133,122,101,104,320],
        'feb':[122,132,144,98,62],
        'march':[64,99,32,12,65] }

接著將資料設定為DataFrame資料格式,放到變數df

df = pd.DataFrame(data,columns=['names','jan','feb','march'])

定義(總)大小:

df['total'] = df['jan']+ df['feb']+df['march']

資料內容就定義完了,現在就要變成圓餅圖了:

定義顏色:

colors = [(1,.4,.4),(1,.6,1),(.5,.3,1),(.7,.7,.2),(.6,.2,.6)]

定義圓餅圖,上面定義的資料放進去:

plt.pie( df['total'] ,
    labels = df['names'],
    colors = colors,
    autopct='%1.1f%%',
    ) 

等比例:

plt.axis('equal') 
plt.show()

Imgur

Bar Chart

接下來要來製作長直條圖表,一樣先import:

import matplotlib.pyplot as plt

With Numpy

這裡我們用Numpy來幫助我們建立資料:

import numpy as np

先建立資料:

col_count = 3
A_scores = (553,536,548)
B_scores = (518,523,523)
C_scores = (613,570,588)
D_scores = (475,505,499)

上面我們定義了A,B,C,D三人的成績,建立index:

index = np.arange(col_count)

建立A的圖表:

k = plt.bar(index,A_scores, .5)
plt.grid(True)
plt.show()

就有基本的Bar圖表了!

接下來我們要建立下面這個圖表:
Imgur

上方可以看到有A,B,C,D四個人,每個人有三個分數包含數學、閱讀、科學。

來看看怎麼做吧!

一樣,先定義資料:

col_count = 3
bar_width = 0.2
index = np.arange(col_count)
A_scores = (553,536,548)
B_scores = (518,523,523)
C_scores = (613,570,588)
D_scores = (475,505,499)

定義bar的圖型:

A = plt.bar(index,
           A_scores, 
           bar_width,
           alpha=.4,
           label="K") 
B = plt.bar(index+0.2,
            B_scores,
            bar_width,
            alpha=.4,
            label="C") 
C = plt.bar(index+0.4,
            C_scores,
            bar_width,
            alpha=.4,
            label="N") # x,y ,width
D = plt.bar(index+0.6,
            D_scores,
            bar_width,
            alpha=.4,
            label="F") # x,y ,width

每個長條圖上面都有顯示文字:

def createLabels(data):
    for item in data:
        height = item.get_height()
        plt.text(
            item.get_x()+item.get_width()/2., 
            height*1.05, 
            '%d' % int(height),
            ha = "center",
            va = "bottom",
        )
createLabels(A)
createLabels(B)
createLabels(C)
createLabels(D)

上面這裡我們用到了plt.text()定義文字,參考:
How to write text above the bars on a bar plot (Python)?

最後:

plt.ylabel("Mean score")
plt.xlabel("Subject")
plt.title("Test Scores by Contry")
plt.xticks(index+.3 / 2 ,("Math","Reading","Science"))
plt.legend() 
plt.grid(True)
plt.show()

plt.legend()為右上角的圖。
plt.xticks為底下的文字(為了至中所以+.3 / 2

ok 這就是今天顯示圖表的部分了!

更多參考資料:
matplotlib.org/pie
matplotlib.org/barchart


上一篇
[Day19]Matplotlib讓資料視覺化!
下一篇
[Day21]Pandas就能輕易將資料視覺化!
系列文
使用Python進行資料分析30

尚未有邦友留言

立即登入留言