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