從零開始學Python資料分析【17】-- matplotlib(面積圖)
前文傳送門:
從零開始學Python資料分析【2】-- 數值計算及正規表示式
從零開始學Python資料分析【3】-- 控制流與自定義函式
從零開始學Python資料分析【5】-- pandas(序列部分)
從零開始學Python資料分析【6】-- pandas(資料框部分01)
從零開始學Python資料分析【7】-- pandas(資料框部分02)
從零開始學Python資料分析【8】-- pandas(資料框部分03)
從零開始學Python資料分析【9】-- pandas(資料框部分04)
從零開始學Python資料分析【10】-- matplotlib(條形圖)
從零開始學Python資料分析【11】-- matplotlib(餅圖)
從零開始學Python資料分析【12】-- matplotlib(箱線圖)
從零開始學Python資料分析【13】-- matplotlib(直方圖)
從零開始學Python資料分析【14】-- matplotlib(折線圖)
從零開始學Python資料分析【15】-- matplotlib(散點圖)
從零開始學Python資料分析【16】-- matplotlib(雷達圖)
前言
我們之前寫過一篇文章是關於折線圖的視覺化《從零開始學Python【14】—matplotlib(折線圖)》,一般來說,**折線圖表達的思想是研究某個時間序列的趨勢**。往往一條折線圖可以根據某個**分組變數進行拆分**,比如今年的銷售額可以拆分成各個事業線的貢獻;流量可以拆分為各個渠道;物流總量可以拆分為公路運輸、鐵路運輸、海運和空運。按照這個思路可以將一條折線圖拆分成**多條折線圖**,直觀的發現各個折線圖的趨勢,但遺憾的是**不能得知總量的趨勢**。為了解決這個問題,我們可以**藉助matplotlib中的stackplot函式繪製面積圖**來直觀表達分組趨勢和總量趨勢。
stackplot函式語法及引數含義
stackplot(x,args,*kargs)
x指定面積圖的x軸資料
*args為可變引數,可以接受任意多的y軸資料,即各個拆分的資料物件
****kargs**為關鍵字引數,可以通過傳遞其他引數來修飾面積圖,如標籤、顏色
可用的關鍵字引數:
labels:以列表的形式傳遞每一塊麵積圖包含的標籤,通過圖例展現
colors:設定不同的顏色填充面積圖
案例分享
以我國**2017年的物流運輸量為例**,來對比繪製折線圖和麵積圖。這裡將物流運輸量拆分成公路運輸、鐵路運輸和水路運輸,繪圖的對比程式碼見下方所示:
# ========== Python3 + Jupyter ========== ## 匯入第三方模組import pandas as pdimport numpy as npimport matplotlib.pyplot as plt# 設定圖形的顯示風格plt.style.use('ggplot')# 設定中文和負號正常顯示plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False# 讀取資料transport = pd.read_excel('transport.xls')# 窺探資料框的前5行transport.head()# 折線圖的x變數值,即Jan(一月份)到Aug(八月份)8個值N = np.arange(transport.shape[1]-1)# 繪製拆分的折線圖 labels = transport.Index
channel = transport.columns[1:]for i in range(transport.shape[0]):
plt.plot(N, # x座標
transport.loc[i,'Jan':'Aug'], # y座標
label = labels[i], # 新增標籤
marker = 'o', # 給折線圖新增圓形點
linewidth = 2 # 設定線的寬度
)# 新增標題和座標軸標籤plt.title('2017年各運輸渠道的運輸量')
plt.ylabel('運輸量(萬噸)')# 修改x軸的刻度標籤plt.xticks(N,channel)# 剔除圖框上邊界和右邊界的刻度plt.tick_params(top = 'off', right = 'off')# 顯示圖例(即顯示label的效果) plt.legend(loc = 'best')
# 顯示圖形plt.show()
這就是繪製分組的折線圖思想,雖然折線圖能夠反映各個渠道的運輸量隨月份的波動趨勢,但無法觀察到1月份到8月份的各自總量。接下來我們看看面積圖的展現。
x = N# 將鐵路運輸、公路運輸和水路運輸各月的值提取出來,儲存到y1~y3# 千萬千萬記得,提取出資料框的一列時,需要將序列的資料型別進行強制轉換,否則會報錯y1 = transport.loc[0,'Jan':'Aug'].astype('int')
y2 = transport.loc[1,'Jan':'Aug'].astype('int')
y3 = transport.loc[2,'Jan':'Aug'].astype('int')# 定義各區塊面積的含義colors = ['#ff9999','#9999ff','#cc1234']# 繪製面積圖plt.stackplot(x, # x軸
y1,y2,y3, # 可變引數,接受多個y
labels = labels, # 定義各區塊面積的含義
colors = colors # 設定各區塊的填充色
)# 新增標題和座標軸標籤plt.title('2017年各運輸渠道的運輸量')
plt.ylabel('累積運輸量(萬噸)')# 修改x軸的刻度plt.xticks(N,channel)# 剔除圖框上邊界和右邊界的刻度plt.tick_params(top = 'off', right = 'off')# 顯示圖例(即顯示labels的效果) plt.legend(loc = 'upper left')# 顯示圖形plt.show()
一個stackplot函式就能解決問題,而且具有很強的定製化。從上面的面積圖就可以清晰的發現兩個方面的資訊,一個是各渠道運輸量的趨勢,另一個是則可以看見各月份的總量趨勢。所以,我們在視覺化的過程中要儘可能的為閱讀者輸出簡單而資訊量豐富的圖形。
結語
OK,關於面積圖的繪製,我們就分享到這裡,但要記得,什麼場景下使用面積圖會更好。如果你有問題,歡迎在公眾號的留言區域表達你的疑問。同時,也歡迎各位朋友繼續轉發與分享文中的內容,讓跟多的人學習和操作。最後,**本文相關的Python指令碼和PDF版本已存放到百度雲盤,可以通過下面的連結獲取:**
連結: https://pan.baidu.com/s/1dF8Lmvv 密碼: uw7y
相關文章
- 從零開始學PythonPython
- 【matplotlib 實戰】--面積圖
- 從零開始資料分析01--什麼是資料分析
- 從零開始資料分析:一個資料分析師的資料分析流程
- 【matplotlib 實戰】--堆疊面積圖
- 資料分析從零開始實戰 | 基礎篇(三)
- 資料分析從零開始實戰 | 基礎篇(二)
- 資料分析從零開始實戰 | 基礎篇(一)
- 從零開始學Python視覺化(五): 餅圖及環形圖Python視覺化
- 《Python深度學習從零開始學》簡介Python深度學習
- 從零開始學Python:第九課-常用資料結構之字串Python資料結構字串
- 【從零開始學習 MySql 資料庫】(2) 函式MySql資料庫函式
- 大資料學習路線(自己制定,從零開始)大資料
- 【從零開始學習Oracle資料庫】(2)函式Oracle資料庫函式
- Python從零開始——學習Python的個人方法Python
- 從零開始學Java,如何拿高工資?Java
- 從零開始學Python:第十一課-常用資料結構之列表Python資料結構
- 從零開始學習KafkaKafka
- 從零開始學習機器學習機器學習
- 【ROS】從零開始學ROSROS
- 從零開始學習laravelLaravel
- 《從零開始學Swift》學習筆記(Day 17)——Swift中陣列集合Swift筆記陣列
- 從零開始學golang之圖-鄰接矩陣Golang矩陣
- python Scrapy 從零開始學習筆記(二)Python筆記
- python Scrapy 從零開始學習筆記(一)Python筆記
- 《從零開始學Python網路爬蟲》概要Python爬蟲
- 從零開始學 Python 之基礎語法Python
- 從零開始學習時空資料視覺化(序)視覺化
- 從零開始JAVA資料結構學習筆記(一)Java資料結構筆記
- 從零開始學Spring Boot系列-返回json資料Spring BootJSON
- 從零開始學機器學習——準備和視覺化資料機器學習視覺化
- 電商資料分析全攻略:從零開始提升運營效率
- 從零開始學Python:第十二課-常用資料結構之元組Python資料結構
- 從零開始學 Spring BootSpring Boot
- 從零開始學golang之udpGolangUDP
- 從零開始學golang之 PrimGolang
- 從零開始學golang之TCPGolangTCP
- eclipse學習從零開始Eclipse