1. 程式人生 > >資料視覺化之matplotlib庫實戰(一)

資料視覺化之matplotlib庫實戰(一)

本篇主要內容來自於唐宇迪-機器學習課程的資料視覺化章節,此文只做個人實操和理解用。

#折線圖的繪製

# -*- 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')

在這裡插入圖片描述