在做完數據分析后,有時候需要將分析結果一目了然地展示出來,此時便離不開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()
繪制所得圖片: