數據可視化實例(十四):面積圖 (matplotlib,pandas)


偏差 (Deviation)

面積圖 (Area Chart)

通過對軸和線之間的區域進行着色,面積圖不僅強調峰和谷,而且還強調高點和低點的持續時間。 高點持續時間越長,線下面積越大。

https://datawhalechina.github.io/pms50/#/chapter14/chapter14

導入所需要的庫

import numpy as np              # 導入numpy庫
import pandas as pd             # 導入pandas庫
import matplotlib as mpl        # 導入matplotlib庫
import matplotlib.pyplot as plt
import seaborn as sns           # 導入seaborn庫

設定圖像各種屬性

large = 22; med = 16; small = 12

params = {'axes.titlesize': large,    # 設置子圖上的標題字體
            'legend.fontsize': med,     # 設置圖例的字體
            'figure.figsize': (16, 10), # 設置圖像的畫布
           'axes.labelsize': med,      # 設置標簽的字體
            'xtick.labelsize': med,     # 設置x軸上的標尺的字體
            'ytick.labelsize': med,     # 設置整個畫布的標題字體
          'figure.titlesize': large}  
#plt.rcParams.update(params)           # 更新默認屬性
plt.style.use('seaborn-whitegrid')    # 設定整體風格
sns.set_style("white")                # 設定整體背景風格

程序代碼

# step1:導入數據
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/economics.csv", parse_dates=['date']).head(100)
x = np.arange(df.shape[0])                    # 創造一個和數據相同長度的序列
y_returns = (df.psavert.diff().fillna(0) / df.psavert.shift(1)).fillna(0) * 100     # 獲取所需要的數據

# step2:繪制面積圖
    # 畫布
plt.figure(figsize = (16, 10),    # 畫布尺寸 
           dpi = 80)              # 分辨率
    # 繪制面積圖
plt.fill_between(x[1:],                        # 定義x坐標
                y_returns[1:],                 # 定義第一條曲線的縱坐標 
                0,                             # 定義第二條曲線的縱坐標  
                where = y_returns[1:] >= 0,    # 被填充的區域
                facecolor = 'green',           # 被填充的顏色(綠色)   
                interpolate = True,            # 交叉點區域的填充 
                alpha = 0.7)                   # 被填充區域的透明度 
plt.fill_between(x[1:],                        # 定義x坐標
                y_returns[1:],                 # 定義第一條曲線的縱坐標
                0,                             # 定義第二條曲線的縱坐標
                where = y_returns[1:] <= 0,    # 被填充的區域 
                facecolor = 'red',             # 被填充的顏色(虹色)
                interpolate = True,            # 交叉點區域的填充  
                alpha = 0.7)                   # 被填充區域的透明度

    # 添加注釋
plt.annotate('Peak \n1975',                              # 文本內容
            xy = (94.0, 21.0),                           # 注釋的起始位置   
            xytext = (88.0, 28),                         # 文本的起始位置
            bbox = dict  (boxstyle = 'square',           # 箱體的形態為方形
                          fc = 'firebrick'),             # 箱體的顏色
            arrowprops = dict(facecolor = 'steelblue',   # 箭頭的類型,箭頭的長度,箭頭的寬度
                             shrink = 0.05),
            fontsize = 15,                               # 文本尺寸
            color = 'white')                             # 文本顏色

# step3:裝飾
    # 橫坐標
xtickvals = [str(m)[:3].upper() + '-' + str(y) for y,m in zip(df.date.dt.year, df.date.dt.month_name())]   # 組合為形如 JUL-1967
plt.gca().set_xticks(x[::6])            # 獲取當前子圖並設置當前子圖的x軸刻度
    # x軸刻度標簽
plt.gca().set_xticklabels(xtickvals[::6],                                       # x軸刻度
                         rotation = 60,                                         # 選擇60度
                         fontdict = {'horizontalalignment': 'center',           # 水平對齊參數
                                     'verticalalignment': 'center_baseline'})   # 垂直對齊參數

    # 設置當前y坐標軸的范圍
plt.ylim(-35, 35)
    # 設置當前x坐標軸的范圍
plt.xlim(1, 100)
    # 設置圖像標題
plt.title('Month Economics Return %',   # 標題名稱
          fontsize = 22)                # 標題尺寸
    # 設置y軸標題
plt.ylabel('Monthly returns %')
    # 設置網格
plt.grid(alpha = 0.5)
plt.show()                              # 顯示圖像

 

 

fill_between()函數總結

matplotlib.pyplot.fill_between(xy1y2=0where=Noneinterpolate=Falsestep=None*data=None**kwargs)

填充兩條水平曲線之間的區域。

曲線由點定義( x , y1 )和( x , y2 )這將創建一個或多個描述填充區域的多邊形。

默認情況下,邊直接連接給定點。使用 step 如果填充應為階躍函數,即介於 x .

x 數組(長度n)

定義曲線的節點的X坐標。

y1 數組(長度n)或標量

定義第一條曲線的節點的Y坐標。

y2 數組(長度n)或標量,可選,默認值:0

定義第二條曲線的節點的Y坐標。

wherebool數組(長度n),可選,默認值:無

定義 where 不填充某些水平區域。填充區域由坐標定義。 x[where] . 更准確地說,填充 x[i] 和 x[i+1] 如果 where[i] and where[i+1] . 注意,這個定義意味着 True 介於兩者之間的值  價值觀 在哪里? 不會導致填充。兩側 True 位置因相鄰而未填滿  價值觀。

interpolate可選的布爾

只有當 where兩條曲線相互交叉。

語義上, where 通常用於 y1 > y2 或類似的。默認情況下,定義填充區域的多邊形節點將僅放置在 x數組。這樣的多邊形無法描述接近交集的上述語義。包含交叉點的X形截面僅被剪裁。

設置 interpolate到 True 將計算實際交叉點並將填充區域擴展到此點。

step 'pre'、'post'、'mid',可選

定義 step 如果填充應為階躍函數,即介於 x . 該值確定步驟的發生位置:

  • “pre”:Y值從 x 位置,即間隔 (x[i-1], x[i]] 具有價值 y[i] .
  • “post”:y值從每個 x 位置,即間隔 [x[i], x[i+1]) 具有價值 y[i] .
  • “mid”:步驟發生在 x 位置。

 


免責聲明!

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



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