資料視覺化之matplotlib庫實戰(一)
阿新 • • 發佈:2019-01-22
本篇主要內容來自於唐宇迪-機器學習課程的資料視覺化章節,此文只做個人實操和理解用。
#折線圖的繪製
# -*- coding: utf-8 -*- import pandas as pd #首先還是照例匯入檔案 unrate = pd.read_csv(r'/Users/herenyi/Desktop/UNRATE.csv',encoding = 'UTF-8') #我們看看該表的前十位資料,這是一個美國政府統計的48年一月以來的每月美國社會失業率。 unrate.head(10) DATE VALUE 0 1948-01-01 3.4 1 1948-02-01 3.8 2 1948-03-01 4.0 3 1948-04-01 3.9 4 1948-05-01 3.5 5 1948-06-01 3.6 6 1948-07-01 3.6 7 1948-08-01 3.9 8 1948-09-01 3.8 9 1948-10-01 3.7 #由於DATA列不是日期型別,我們先抓換成日期型別 unrate['DATE'] = pd.to_datetime(unrate['DATE']) import matpplotlib.pyolot as plt # 匯入畫相簿 first_year = unrate[0:12] #先切片第一年的資料 plt.plot(first_year['DATE'], first_year ['VALUE']) plt.show() #在ipython環境下你需要加入這段程式碼才能看見圖片
如圖所示,X軸刻度標籤混雜在一起非常不美觀。我們需要做如下修改,隨便加上各種標題使其完整。
plt.plot( first_year['DATE'], first_year ['VALUE'])
plt.xticks(rotation = 45) #X軸刻度標籤,rotation代表旋轉角度,我們旋轉45度。
plt.xlabel('Month') # X軸標題
plt.ylabel('Unemployment Rate') #Y軸標題
plt.title('Monthly Unemployment Trends, 1948') #圖表表圖
子圖操作
有時候我們需要在一張圖表裡插入多項子圖來表達同一個資料,這時候就需要子圖操作。
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure() #首先先建立個空白圖形變數
ax1 = fig.add_subplot(2,2,1) #往這個空白圖形變數新增子圖,引數中的(2,2,1)分別代表
這是一個2*2的圖形矩陣,尾數1表示是第一張圖。
這就是輸出上文程式碼後的結果,只有第一張已建立的ax1顯示在圖表上,其餘留白。
ax2 = fig.add_subplot(2,2,2) #我們再在2號位置上加個圖表 ax1.plot(np.random.randint(1,5,5), np.arange(5)) #在表一繪製隨機點,大家還記得randint函式嗎?前面兩位1,5表示從大於等於1到小於五區間,尾數5表示任意取五個點 ax2.plot(np.arange(10)*3, np.arange(10))
接下來我們學習在一張圖表裡插入多條資料,還是原來那張圖
ax3 = fig.add_subplot(2,2,3)
# 從之前的資料提取月份資料,建立新列
unrate = pd.read_csv(r'/Users/herenyi/Desktop/UNRATE.csv',encoding = 'UTF-8')
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
unrate['Month'] = unrate['DATE'].dt.month
#再ax3繪製前兩年的的每月分失業率折線圖
ax3.plot(unrate[0:12]['Month'], unrate[0:12]['VALUE'], c = 'red')
ax3.plot(unrate[12:24]['Month'], unrate[12:24]['VALUE'], c = 'blue')
這樣的話我們只能輸出兩年的美國失業率,為了輸出更多的折線,我們考慮用for迴圈語句去繪製更多的折線。
fig = plt.figure(figuresize = (10, 6)
colors = ['red', 'blue', 'green', 'orange', 'black'] #顏色庫
# ax3.plot(unrate[12:24]['Month'], unrate[12:24]['VALUE'], c = 'blue'),這是我們上面的一條折線的輸出,我們要迴圈輸出就要觀察所需要變化的位置,主要就是顏色和行切片那。所以:
for i in range(5):
start_index = 12*i
end_index = 12 + 12*i
plt.plot(unrate[start_index:end_index]['Month'],
unrate[start_index:end_index]['VALUE'], c = colors[i])
自己附加作業:這裡我們就得到了我們想要的多條折線圖表,可是我們需要更多的折線怎麼辦,總不能一個個顏色往顏色庫裡填吧。想到之前顏色還可以用rgb表示,colors(x, y, z), 也就是說只要有三個隨機引數我們就可以隨機我們的顏色。那就動手去做吧,原先的架構不變,就是顏色庫那進行改造。
import random #主要就是運用下random這個函式
fig = plt.figure(figuresize = (10, 6) #建立一個新的圖表
for i in range(10): #要繪製多少條折線,引數就在這裡調
x = random.uniform(0,1)
y = random.uniform(0,1)
z = random.uniform(0,1) #每迴圈一次就可以生成新的顏色引數,達到我們有多少次迴圈就有多少次顏色目的
start_index = 12*i
end_index = 12 + 12*i
plt.plot(unrate[start_index:end_index]['Month'],
unrate[start_index:end_index]['VALUE'], color = (x,y,z))
貌似顏色區分不怎麼明顯,哈哈,算了就當自己一個失敗的嘗試吧,主要對三原色的引數代表顏色的明亮程度還不怎麼清楚,應該把random區間定位在亮色區比較好。接下來我們就進行修尾工作了,加入圖例,軸標籤標題之類的。
fig = plt.figure(figuresize = (10, 6)
for i in range(10):
x = random.uniform(0,1)
y = random.uniform(0,1)
z = random.uniform(0,1)
start_index = 12*i
end_index = 12 + 12*i
label = str(1948 + i) #加入標籤,資料從1948年開始,不新增的話則會以列名為標籤名
plt.plot(unrate[start_index:end_index]['Month'],
unrate[start_index:end_index]['VALUE'], color = (x,y,z), label = label)
plt.legend(loc = 'best') #加入圖例,位置讓python自動幫我們選擇圖表中留白部分,當然你也可以自己選定位置,具體參考文件help(plt.legend)
還是有點醜滴。最後放上自己實戰的原始碼和最後效果,作為本篇終結。
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
unrate = pd.read_csv(r'/Users/herenyi/Desktop/UNRATE.csv')
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
unrate['Month'] = unrate['DATE'].dt.month
fig = plt.figure(figsize = (10, 6))
for i in range(10):
x = random.uniform(0,1)
y = random.uniform(0,1)
z = random.uniform(0,1)
start_index = 12*i
end_index = 12 + 12*i
label = str(1948 + i)
plt.plot(unrate[start_index:end_index]['Month'],
unrate[start_index:end_index]['VALUE'], color = (x,y,z),label =label)
plt.legend(loc = 'best')
plt.xlabel('Month, Integer')
plt.ylabel('Unemployment Rate, Percent')
plt.title('Monthly Unemployment Trends, 1948-1957')