Python可視化庫-Matplotlib使用總結


在做完數據分析后,有時候需要將分析結果一目了然地展示出來,此時便離不開Python可視化工具,Matplotlib是Python中的一個2D繪圖工具,是另外一個繪圖工具seaborn的基礎包

先總結下繪制子圖的步驟:

1.確定繪制的圖形形狀(如折線圖/條狀圖/柱狀圖/餅圖/散點圖等)
2.填充x/y軸的數據
3.圖形細節調整(這里可以做很多調整,如x/y軸文字參數說明,顏色/線粗/柱狀粗度,x/y軸文字角度等)
4.顯示圖像(調用show())

總結下一個區域同時繪制多個子圖的步驟

1.確定繪圖區域大小
2.確定每個子圖在繪圖區域的位置
3.繪制每個子圖(步驟如上)
4.顯示圖像(調用show())

繪制折線圖

需求:根據一張美國的失業率數據,繪制出1948年12個月中的失業率折線圖,其中x軸表示月份,y軸表示失業率

數據如下

       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
10 1948-11-01    3.8
11 1948-12-01    4.0

unrate.csv
上代碼

#導包
import pandas as pd
import matplotlib.pyplot as plt

# 讀取本地的csv文件,里面的數據為美國失業率數據,得到的數據為DataFrame類型
unrate = pd.read_csv('unrate.csv')

# 使用pd中的pd.to_datetime函數將DATE列的字符串類型數據轉換成pd中的標准時間格式
unrate['DATE'] = pd.to_datetime(unrate['DATE'])

# 取出前面12條樣本數據
first_twelve = unrate[0:12]

# 填充數據並繪制折線圖,第一個參數為x軸數據,第二個參數為y軸數據
plt.plot(first_twelve['DATE'], first_twelve['VALUE'])

# 將x軸下面文字旋轉90度
plt.xticks(rotation=90)

# 設置x軸的標簽
plt.xlabel('Month')

# 設置y軸的標簽
plt.ylabel('Unemployment Rate')

# 設置圖標名稱
plt.title('Monthly Unemployment Trends, 1948')

# 顯示圖像
plt.show()

圖像如圖所示:

在一個區域繪制多個子圖

有時候,需要將多張圖像在一塊區域顯示,方便對比

上代碼:

# 導包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 確定總繪圖區寬和高分別為都是3x6
fig = plt.figure(figsize=(3, 6))

# 添加第一個子圖,並且確定在總繪圖區域的位置,add_subpolt(2,1,1),前兩個參數參數2,1表示將總繪圖區域划分為兩行1列(跟矩陣表示很像)
# 第3個參數表示該子圖占總區域的第一個位置.注(將總區域分成2行1列后,位置順序從上到下,從左到右,從1開始遞增)
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)

# 繪制子圖
ax1.plot(np.random.randint(1,5,5), np.arange(5))
ax2.plot(np.arange(10)*3, np.arange(10))

# 顯示圖像
plt.show()

圖像如圖所示

在一張圖中同時繪制多條曲線

需求:在同一張圖,同時將1948到1952年的失業率展示出來,曲線使用不同的顏色區分

上代碼

#繪制5年內的失業率曲線圖

#導包
import numpy as np
import pandas as pd
import matplotlib.pypolt as plt

# 讀取本地數據
unrate=pd.read_csv('UNRATE.csv')

# 將字符串時間轉換成pd中的時間格式
unrate['DATE']=pd.to_datetime(unrate['DATE'])

# 將年份時間轉換成月份時間,並新建列存起來,因為需求需要將5年內的當年12個月內的失業率展示出來,此時再用年時間作為x軸下標就不合適了
unrate['MONTH']=unrate['DATE'].dt.month

# 設置5個顏色數組,分別表示5條曲線顏色
colors=['red','green','blue','black','yellow']

# 設置總繪圖區域大小,需要在調用繪圖函數之前調用才有效果
plt.figure(figsize=(10,6))   

#遍歷5次
for i in range(5):
    

    #取出當年12個月的數據     
    data12=unrate[12*i:12*(i+1)]
    
    #x軸數據
    data_x=data12['MONTH']
    
    #y軸數據
    data_y=data12['VALUE']
    
    #當年的曲線的標簽
    label=str(1948+i)
        
    # 繪制當年的曲線圖
    plt.plot(data_x,data_y,c=colors[i],label=label)

    
# 設置x軸標簽
plt.xlabel('MONTH')

# 設置y軸標簽
plt.ylabel('unrate')

# 設置圖標名稱
plt.title('US-unrae,1948-1952')

# 設置曲線標簽說明,loc='best'表示自己選擇合適的位置來擺放
plt.legend(loc='best')

# 顯示圖像
plt.show()

得到的圖像:

繪制條形圖

直方圖和條形圖的區別:由於分組數據具有連續性,直方圖中的各矩形通常是連續排列,而條形圖則是分開排列。此外直方圖的高度表示各小組內數據個數,而條形圖高度表示某項目內的數據個數。

fandango_scores.csv
上代碼:

# 導包
import pandas as pd
import matplotlib.pyplot as plt
from numpy import arange

# 讀取電影評分數據
reviews = pd.read_csv('fandango_scores.csv')

# 取出需要展示的列名
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']

# 取出需要展示的樣本數據
norm_reviews = reviews[cols]

# 評分數據的列名
num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']

# 取出第一部電影的評分樣本數據
bar_heights = norm_reviews.loc[0, num_cols].values

# 條形圖的位置
bar_positions = arange(5) + 0.75


tick_positions = range(1,6)
fig, ax = plt.subplots()

# 繪制條形圖,第一個參數為x軸數據,第二個參數為y軸數據,第三個參數為每個條形的寬度
ax.bar(bar_positions, bar_heights,0.5)

# 設置x軸標簽的位置
ax.set_xticks(tick_positions)

# 設置x軸標簽的名字和角度
ax.set_xticklabels(num_cols, rotation=45)

# 設置x軸標簽
ax.set_xlabel('Rating Source')

# y軸標簽
ax.set_ylabel('Average Rating')

# 標題
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
plt.show()

繪制的圖片:

繪制直方圖

直方圖一般用來統計一定范圍內的數據

上代碼

import pandas as pd
import matplotlib.pyplot as plt
reviews = pd.read_csv('fandango_scores.csv')
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
norm_reviews = reviews[cols]

# 對評分進行數量統計
fandango_distribution = norm_reviews['Fandango_Ratingvalue'].value_counts()

# 排序索引
fandango_distribution = fandango_distribution.sort_index()

imdb_distribution = norm_reviews['IMDB_norm'].value_counts()
imdb_distribution = imdb_distribution.sort_index()

fig, ax = plt.subplots()

# 繪制直方圖
ax.hist(norm_reviews['Fandango_Ratingvalue'],bins=20)

plt.show()

繪制所得圖像:

繪制散點圖

上代碼:

# 導包
import pandas as pd
import matplotlib.pyplot as plt
from numpy import arange

# 讀取電影評分數據
norm_reviews = pd.read_csv('fandango_scores.csv')

# 取出需要展示的列名
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']

# 取出需要展示的樣本數據
norm_reviews = reviews[cols]

fig, ax = plt.subplots()

#繪制散點圖
ax.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm'])
ax.set_xlabel('Fandango')
ax.set_ylabel('Rotten Tomatoes')
plt.show()

繪制所得圖片:

繪制盒圖

箱形圖(英文:Box-plot),又稱為盒須圖、盒式圖、盒狀圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖。因型狀如箱子而得名。在各種領域也經常被使用,常見於品質管理。不過作法相對較繁瑣。它能顯示出一組數據的最大值、最小值、中位數、下四分位數及上四分位數。

上代碼:

import pandas as pd
import matplotlib.pyplot as plt
reviews = pd.read_csv('fandango_scores.csv')
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
norm_reviews = reviews[cols]

num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
fig, ax = plt.subplots()

#繪制盒圖
ax.boxplot(norm_reviews[num_cols].values)
ax.set_xticklabels(num_cols, rotation=90)
ax.set_ylim(0,5)
plt.show()

繪制所得圖片:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM