作者:劉順祥
個人微信公眾號:每天進步一點點2015
前文傳送門:
從零開始學Python數據分析【1】--數據類型及結構
從零開始學Python數據分析【2】-- 數值計算及正則表達式
從零開始學Python數據分析【3】-- 控制流與自定義函數
從零開始學Python數據分析【4】-- numpy
從零開始學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(直方圖)
我們接著上一期matplotlib繪圖內容,講解一下關於折線圖的繪製,折線圖一般是用來表示某個數值變量隨著時間的推移而形成的趨勢,這種圖還是比較常見的,如經濟走勢圖、銷售波動圖、PV監控圖等。在Python的matplotlib模塊中,我們可以調用plot函數就能實現折線圖的繪製了,先來看看這個函數的一些參數含義。
plot函數的參數解讀matplotlib模塊中plot函數語法及參數含義:
plt.hist(x,y,linestyle, linewidth,color,marker, markersize,markeredgecolor, markerfactcolor,label,alpha)
一元折線圖的繪製案例:每天進步一點點2015公眾號文章閱讀人數
# 導入模塊
import pandas as pd
import matplotlib.pyplot as plt
# 設置繪圖風格
plt.style.use('ggplot')
# 設置中文編碼和負號的正常顯示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# 讀取需要繪圖的數據
article_reading = pd.read_excel('wechart.xlsx')
# 取出8月份至9月28日的數據
sub_data = article_reading.loc[article_reading.date >= '2017-08-01' ,:]
# 設置圖框的大小
fig = plt.figure(figsize=(10,6))
# 繪圖
plt.plot(sub_data.date, # x軸數據 sub_data.article_reading_cnts, # y軸數據 linestyle = '-', # 折線類型 linewidth = 2, # 折線寬度 color = 'steelblue', # 折線顏色 marker = 'o', # 點的形狀 markersize = 6, # 點的大小 markeredgecolor='black', # 點的邊框色 markerfacecolor='brown') # 點的填充色
# 添加標題和坐標軸標籤
plt.title('公眾號每天閱讀人數趨勢圖')plt.xlabel('日期')plt.ylabel('人數')
# 剔除圖框上邊界和右邊界的刻度
plt.tick_params(top = 'off', right = 'off')
# 為了避免x軸日期刻度標籤的重疊,設置x軸刻度自動展現,並且45度傾斜
fig.autofmt_xdate(rotation = 45)
# 顯示圖形
plt.show()
由於x軸是日期型數據,當數據量一多的時候,就會導致刻度標籤的重疊或擁擠,為了防止重疊的產生,我們需要讓日期型的x軸刻度標籤自動展現,從而避免重疊的現象。下面兩幅圖是對比自動刻度標籤的前後變化:
可能你並不滿足這樣的刻度標籤展現形式,你想以個性化的展現方式,如「YYYY-MM-DD」的顯示方式,同時又想以固定的幾天作為間隔,這樣的設置又該如何實現?其實非常的簡單,只需要在上面代碼的基礎上添加幾行代碼就可以輕鬆搞定。
一元折線圖的繪製—圖形優化# 導入模塊
import matplotlib as mpl
# 設置圖框的大小
fig = plt.figure(figsize=(10,6))
# 繪圖
plt.plot(sub_data.date, # x軸數據 sub_data.article_reading_cnts, # y軸數據 linestyle = '-', # 折線類型 linewidth = 2, # 折線寬度 color = 'steelblue', # 折線顏色 marker = 'o', # 點的形狀 markersize = 6, # 點的大小 markeredgecolor='black', # 點的邊框色 markerfacecolor='steelblue') # 點的填充色
# 添加標題和坐標軸標籤
plt.title('公眾號每天閱讀人數趨勢圖')plt.xlabel('日期')plt.ylabel('人數')
# 剔除圖框上邊界和右邊界的刻度
plt.tick_params(top = 'off', right = 'off')
# 獲取圖的坐標信息
ax = plt.gca()
# 設置日期的顯示格式
date_format = mpl.dates.DateFormatter("%Y-%m-%d") ax.xaxis.set_major_formatter(date_format) # 設置x軸顯示多少個日期刻度
#xlocator = mpl.ticker.LinearLocator(10)
# 設置x軸每個刻度的間隔天數
xlocator = mpl.ticker.MultipleLocator(5)ax.xaxis.set_major_locator(xlocator)
# 為了避免x軸日期刻度標籤的重疊,設置x軸刻度自動展現,並且45度傾斜
fig.autofmt_xdate(rotation = 45)
# 顯示圖形
plt.show()
如果你需要在一張圖形中畫上兩條折線圖,也很簡單,只需要在代碼中寫入兩次plot函數即可,其他都不需要改動了。具體可以參考下面的代碼邏輯:
# 設置圖框的大小
fig = plt.figure(figsize=(10,6))
# 繪圖--閱讀人數趨勢
plt.plot(sub_data.date, # x軸數據 sub_data.article_reading_cnts, # y軸數據 linestyle = '-', # 折線類型 linewidth = 2, # 折線寬度 color = 'steelblue', # 折線顏色 marker = 'o', # 點的形狀 markersize = 6, # 點的大小 markeredgecolor='black', # 點的邊框色 markerfacecolor='steelblue', # 點的填充色 label = '閱讀人數') # 添加標籤
# 繪圖--閱讀人次趨勢
plt.plot(sub_data.date, # x軸數據 sub_data.article_reading_times, # y軸數據 linestyle = '-', # 折線類型 linewidth = 2, # 折線寬度 color = '#ff9999', # 折線顏色 marker = 'o', # 點的形狀 markersize = 6, # 點的大小 markeredgecolor='black', # 點的邊框色 markerfacecolor='#ff9999', # 點的填充色 label = '閱讀人次') # 添加標籤
# 添加標題和坐標軸標籤
plt.title('公眾號每天閱讀人數和人次趨勢圖')plt.xlabel('日期')plt.ylabel('人數')
# 剔除圖框上邊界和右邊界的刻度
plt.tick_params(top = 'off', right = 'off')
# 獲取圖的坐標信息
ax = plt.gca()
# 設置日期的顯示格式
date_format = mpl.dates.DateFormatter('%m-%d') ax.xaxis.set_major_formatter(date_format) # 設置x軸顯示多少個日期刻度
#xlocator = mpl.ticker.LinearLocator(10)
# 設置x軸每個刻度的間隔天數
xlocator = mpl.ticker.MultipleLocator(3)ax.xaxis.set_major_locator(xlocator)
# 為了避免x軸日期刻度標籤的重疊,設置x軸刻度自動展現,並且45度傾斜
fig.autofmt_xdate(rotation = 45)
# 顯示圖例
plt.legend()
# 顯示圖形
plt.show()
兩條折線圖很完美的展現在一張圖中,公眾號的閱讀人數與人次趨勢完全一致,而且具有一定的周期性,即過幾天就會有一個大幅上升的波動,這個主要是由於雙休日的時候,時間比較空閒,就可以更新並推送文章了。
結語OK,今天關於Pyhton繪製折線圖的講解就到此結束,如果你感興趣,不妨和我一起學習與交流,同時也歡迎各位朋友繼續轉發與分享,讓系統的知識不斷的擴散出去。下一期我們將推送散點圖的繪製。文中相關的Python腳本和PDF版本已存放到百度雲盤,可以通過下面的連結獲取:
連結: https://pan.baidu.com/s/1geX2RiN 密碼: wnr3
Python愛好者社區歷史文章大合集:
Python愛好者社區歷史文章列表(每周append更新一次)
福利:文末掃碼立刻關注公眾號,「Python愛好者社區」,開始學習Python課程:
關注後在公眾號內回復「課程」即可獲取:
0.小編的Python入門視頻課程!!!
1.崔老師爬蟲實戰案例免費學習視頻。
2.丘老師數據科學入門指導免費學習視頻。
3.陳老師數據分析報告製作免費學習視頻。
4.玩轉大數據分析!Spark2.X+Python 精華實戰課程免費學習視頻。
5.丘老師Python網絡爬蟲實戰免費學習視頻。