matplotlib繪圖和可視化

前面用excel做繪圖和可視化,似乎有點複雜了,python有更強大的繪圖庫,pyplot。 讓繪圖更加省心。

matplotlib的pyplot子庫提供了和matlab類似的繪圖API,方便用戶快速繪製2D圖表。

matplotlib.pyplot是命令行式函數的集合,每一個函數都對圖像作了修改,比如創建圖形,在圖像上創建畫圖區域,在畫圖區域上畫線,在線上標註等。

一個區域畫多個圖

Figure和Subplot

matplotlib的圖像都位於Figure對象中。可以用plt.figure創建一個新的Figure:

import matplotlib.pyplot as plt

fig = plt.figure() # 創建對象

plt.show() # 顯示圖像,無此句代碼將不能顯示圖像

但有的時候我們需要在一個大區域畫好幾張小圖。具體實現看下面代碼:

import matplotlib.pyplot as plt

『』『 Author: Anderson 『』『fig = plt.figure() # 定義區域

ax1 = fig.add_subplot(2,2,1) # 添加子圖,參數2,2,1代表區域劃分為2行2列共4個區域,順序為1開始從左到右,從上到下。1為在1區域添加子圖。即前兩個參數代表布局,第三個參數代表位置。

ax2 = fig.add_subplot(2,2,2) # 2為在2區域添加子圖

ax3 = fig.add_subplot(2,2,3) # 3為在3區域添加子圖

plt.show() # 這裡不給圖填充數據,我們畫一下看效果

matplotlib就會在最後一個用過的subplot(如果沒有則創建一個)上進行繪製。

上面那些由fig.add_subplot所返回的對象,直接調用他們的實例方法就可以在其他空著的格子裡面畫圖了,如圖:

import matplotlib.pyplot as plt

import numpy as np『』『 Author: Anderson 『』『fig = plt.figure() # 定義區域

ax1 = fig.add_subplot(2,2,1) # 添加子圖,參數2,2,1代表區域劃分為2行2列共4個區域,順序為1開始從左到右,從上到下。1為在1區域添加子圖。即前兩個參數代表布局,第三個參數代表位置。

ax2 = fig.add_subplot(2,2,2) # 2為在2區域添加子圖

ax1.hist(np.random.randn(100),bins=20,color=k,alpha=0.3) # 20個直方圖,alpha透明度

ax2.scatter(np.arange(30),np.arange(30)+3*np.random.randn(30)) # 繪製散點圖

plt.show()

這是非常實用的,因為可以輕鬆的對axes數組進行索引,就好像是一個二維數組一樣,例如,axes[0,1].hist(randn(100),bins=20,color=』red』,alpha=0.3)

折線圖(散點)-plot()

matplotlib.pyplot.plot(args, *kwargs)

繪製線條或標記的軸。參數是一個可變長度參數,允許多個X、Y對可選的格式字元串。

例如,下面的每一個都是合法的:

plot(x, y) #plot x, y使用默認的線條樣式和顏色

plot(x, y, 『bo』) #plot x,y用藍色圓圈標記

plot(y) #plot y用x作為自變數

plot(y, 『r+』) #同上,但是是用紅色作為標記

如果x或y是2維的,那麼相應的列將被繪製。

x、y的任意數,格式可以如下:

a.plot(x1, y1, g^, x2, y2, g-)

默認情況下,每個行被指定一個由「顏色周期」指定的不同顏色。要改變這種行為,可以編輯axes.color_cycle中的rcparam。下面的字元用來描述繪製的圖形:

字元描述『-『實線『—『虛線『-.』點線『:』點虛線『.』點『,』像素『o』圓形『v』朝下的三角形『^』朝上的三角形『<』朝左的三角形『>』朝右的三角形顏色用以下字元表示:

字元顏色『b』藍色『g』綠色『r』紅色『c』青色『m』品紅『y』黃色『k』黑色『w』白色例子1:

假設測試某台伺服器性能,得到並發數和吞吐量,畫圖如下:

import matplotlib.pyplot as plt

『』『 Author: Anderson 『』『transation= [300,456,564,439,376]

user_number = [200,300,400,500,600]

# fig = plt.figure()

fig = plt.figure(figsize=(10, 12)) # figsize=(10, 12)參數為手動設定區域(長,寬)的大小

plt.xticks(rotation=20) # 旋轉20度

plt.xlabel(User number)

plt.ylabel(Transation)

plt.title(Performance--Transation)

plt.plot(user_number, transation)

plt.show()

例子2:

假設測試某台伺服器性能, 得到CPU和內存利用率, 畫圖如下:

import matplotlib.pyplot as plt

『』『 Author: Anderson 『』『cpu = [10, 25, 33, 47, 60]

memory = [40, 55, 63, 77, 80]

user_number = [200, 300, 400, 500, 600]

# fig = plt.figure()

fig = plt.figure(figsize=(10, 12)) # figsize=(10, 12)參數為手動設定區域(長,寬)的大小

plt.xticks(rotation=20) # 旋轉20度

plt.xlabel(User number)

plt.ylabel(Resource %)

plt.title(Performance--CPU,mem)

plt.plot(user_number, cpu, c=r,label=cpu) #c=r定義畫線為紅色

plt.plot(user_number, memory, c=b,label=memory) #c=b定義畫線為藍色

plt.legend(loc=best)

plt.show()

例子3:

假設某個測試,有多個指標,可以並列參考:

import matplotlib.pyplot as plt

『』『

Author: Anderson

『』『

fig = plt.figure(figsize=(6, 8)) # figsize=(6, 8)參數為手動設定區域(長,寬)的大小

plt.xlabel(User number)

plt.ylabel(performace usage)

plt.title(Performance--Testing)

user_number = [200, 300, 400, 500, 600]

test_part1 = [139, 158, 269, 312, 201]

test_part2 = [201, 212, 243, 255, 289]

test_part3 = [190, 219, 222, 235, 245]

test_part4 = [189, 190, 199, 178, 175]

test = [user_number, test_part1, test_part2, test_part3, test_part4]

colors = [red, blue, green, orange]

for i in range(1, 5):

label = "test{}".format(i)

plt.plot(test[0], test[i], c=colors[i - 1], label=label) # 把label=label加進去

plt.legend(loc=best) # 用這句把提示標籤畫出來,loc參數決定標籤在圖中放的位置

# print(help(plt.legend)) # 查看plt.legend函數都有什麼參數可選

plt.show()

對於添加圖例,在plot對象中通過label參數添加即可,最後在plt.legend(loc=」)中選擇添加位置就輕鬆完成。

圓餅圖-pie()

pie()最基本的輸入數據是一個數組。它可以根據數組元素的比例繪製扇形,因此不必要事先計算好百分比。

樣式

有幾個最常用的參數可以控制繪圖樣式:

colors - 數組,扇形顏色

explode - 數組,扇形偏離圓心的距離

labels - 數組,扇形的標籤

首先,讓我們為餅圖設定顏色,並讓第三個扇形抽離出來

import matplotlib.pyplot as plt

『』『 Author: Anderson 『』『rate = [1, 7, 3, 9]

explode = [0, 0, 0.1, 0]

colors = [『c『, 『m『, 『y『, 『g『]

plt.pie(rate, explode=explode, colors=colors)

plt.show()

加標籤:

labels = [『Apple『, 『Pear『, 『Peach『, 『Orange『]

plt.pie(rate, explode=explode, colors=colors, labels=labels)

autopct=『%d%%『表示我們將百分比以整數(%d)形式輸出,後綴是百分號『%『。在格式化字元串中,百分號要用『%%『轉義字元表示。

柱形圖-bar()

什麼是最簡單的bar,看如下語句你就知道她有多麼簡單了:

import matplotlib.pyplot as plt

plt.bar(left = 0,height = 1)

plt.show()

搞個複雜一點的。

import matplotlib.pyplot as plt

『』『 Author: Anderson 『』『month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

cost = [8, 7, 9, 9, 3, 10, 10, 12, 8, 6, 11, 10]

profit = [12, 11, 11, 13, 5, 11, 13, 15, 10, 9, 12, 13]

bar1 = plt.barh(month, profit, 0.5, color=y, linewidth = 0, align =center)

bar2 = plt.barh(month, cost, 0.5, color=g, linewidth = 0, align =center)

plt.legend((bar1[0], bar2[0]), (Profits, Costs) )

plt.show()

讓我們來繪製一個水平柱圖,只需將bar()替換成barh()就可以了。

OK, 說了這麼多,可能沒記住,我們來總結一下:

如果要畫多個子圖

1.我們先要定義畫布:

fig = plt.figure()

2.然後選擇一個區域:

ax1 = fig.add_subplot(3,2,1) # 添加子圖

3.最後在子圖中畫圖如果是畫pie()只要設置一下pie的比例,顏色,labels 就差不錯了(也可以設置autopct,顯示小數位數)

如果是畫折線(散點),或者柱狀圖,設置下x,y坐標,顏色,標籤

可以設置x軸,y軸,title, legend

如果記不住這些,可以用print(help()) 加函數列印出來就可以看到各個參數了。

例如:print(help(plt.legend()))

掌握畫圖,會讓你的數據分析更有說服力。

更多精彩,請關注微信公眾號:python愛好部落


推薦閱讀:

[小心得]環形布局(Circle Layout)圖
運動軌跡熱力圖中的台灣導彈基地安全隱患
全球恐怖襲擊數據的可視分析
爬蟲與反爬蟲 | 土法破解字元映射反爬策略及高頻詞可視化
可視化辭典 Visual vocabulary

TAG:數據可視化 | 自動化測試 |