Python視覺化(1):折線圖
摘要: 利用matplotlib繪製橫軸為日期格式的折線圖時,存在不少技巧。本文藉助Tushare包返回的股票資料,介紹日期型折線圖繪製的方法。
上一篇文章的最後講到了折線圖的繪製,本文接著進行詳細介紹其繪製方法,回顧:
Python資料處理分析(1):日期型資料處理
折線圖繪製的資料來源,採用Tushare包獲取上市公司基本資料表,格式如下:
1import pandas as pd
2data = pd.read('get_stock_basics.csv',encoding = 'utf8')
3print(data.head())
4
5ts_code symbol name list_status list_date is_hs
6000001.SZ 1 平安銀行 L 19910403 S
7000002.SZ 2 萬科A L 19910129 S
8000004.SZ 4 國農科技 L 19910114 N
9000005.SZ 5 世紀星源 L 19901210 N
然後利用resample
和to.period
方法彙總各年度的上市公司數量資料,格式為Pandas.Series陣列。
1# 彙總各年上市公司數量
2data = data.set_index(['list_date'])
3data = data.resample('AS').count()['ts_code']
4data = data.to_period('A')
5print(data.head())
6print(data.tail())
7# 結果如下:
8list_date
91990 7
101991 4
111992 37
121993 106
131994 99
14...
15list_date
162014 124
172015 223
182016 227
192017 438
202018 78
1. Series直接繪製折線圖
首先,我們可以直接利用pandas的陣列Series繪製折線圖:
1import matplotlib.pyplot as plt
2plt.style.use('ggplot') # 設定繪圖風格
3fig = plt.figure(figsize = (10,6)) # 設定圖框的大小
4ax1 = fig.add_subplot(1,1,1)
5data.plot() # 繪製折線圖
6
7# 設定標題及橫縱座標軸標題
8colors1 = '#6D6D6D' #設定標題顏色為灰色
9plt.title('歷年中國內地上市公司數量變化',color = colors1,fontsize = 18)
10plt.xlabel('年份')
11plt.ylabel('數量(家)')
12plt.show()
可以發現,圖中存在兩個問題:一是缺少數值標籤,二是橫座標年份被自動分割了。我們希望能夠新增上數值標籤,然後座標軸顯示每一年的年份值。接下來,需要採用新的方法重新繪製折線圖。
2. 折線圖完善
1# 建立x,y軸標籤
2x = np.arange(0,len(data),1)
3 ax1.plot(x,data.values, #x、y座標
4 color = '#C42022', #折線圖顏色為紅色
5 marker = 'o',markersize = 4 #標記形狀、大小設定
6 )
7ax1.set_xticks(x) # 設定x軸標籤為自然數序列
8ax1.set_xticklabels(data.index) # 更改x軸標籤值為年份
9plt.xticks(rotation=90) # 旋轉90度,不至太擁擠
10
11for x,y in zip(x,data.values):
12 plt.text(x,y + 10,'%.0f' %y,ha = 'center',color = colors1,fontsize = 10 )
13 # '%.0f' %y 設定標籤格式不帶小數
14# 設定標題及橫縱座標軸標題
15plt.title('歷年中國內地上市公司數量變化',color = colors1,fontsize = 18)
16plt.xlabel('年份')
17plt.ylabel('數量(家)')
18# plt.savefig('stock.png',bbox_inches = 'tight',dpi = 300)
19plt.show()
完善後的折線圖如下:
可以看到,x軸逐年的資料都顯示並且數值標籤也新增上了。
3. 多元折線圖
上面介紹了一元折線圖的繪製,當需要繪製多元折線圖時,方法也很簡單,只要重複繪圖函式即可。這裡我們以二元折線圖為例,繪製國內兩家知名地產公司萬科和保利地產2017年的市值變化對比折線圖。
3.1. 資料來源
資料來源仍然採用tushare包的pro.daily_basic()
介面,該介面能夠返回股票的每日股市資料,其中包括每日市值total_mv
。我們需獲得的兩隻股票分別是萬科地產(000002.SZ)和保利地產(600048.SH),下面就來獲取兩隻股票2017年的市值資料。
1import tushare as ts
2ts.set_token('你的token') # 官網註冊後可以獲得
3pro = ts.pro_api()
4def get_stock():
5 lst = []
6 ts_codes = ['000002.SZ', '600048.SH']
7 for ts_code in ts_codes:
8 data = pro.daily_basic(
9 ts_code=ts_code, start_date='20170101', end_date='20180101')
10 print(lst)
11 reutrn lst
12 # 結果如下,total_mv為當日市值(萬元):
13 #萬科地產資料
14 ts_code trade_date close … total_mv circ_mv
150 000002.SZ 20171229 31.06 … 3.43E+07 3.02E+07
161 000002.SZ 20171228 30.7 … 3.39E+07 2.98E+07
172 000002.SZ 20171227 30.79 … 3.40E+07 2.99E+07
183 000002.SZ 20171226 30.5 … 3.37E+07 2.96E+07
194 000002.SZ 20171225 30.37 … 3.35E+07 2.95E+07
20
21 #保利地產資料
22 ts_code trade_date close … total_mv circ_mv
230 600048.SH 20171229 14.15 … 1.68E+07 1.66E+07
241 600048.SH 20171228 13.71 … 1.63E+07 1.61E+07
252 600048.SH 20171227 13.65 … 1.62E+07 1.60E+07
263 600048.SH 20171226 13.85 … 1.64E+07 1.63E+07
274 600048.SH 20171225 13.55 … 1.61E+07 1.59E+07
下面對資料作進一步修改,從DataFrame中提取total_mv列,index設定為日期,再利用resample和pd.to_period方法按月彙總市值資料。
1data['trade_date'] = pd.to_datetime(data['trade_date'])
2# 設定index為日期
3data = data.set_index(data['trade_date']).sort_index(ascending=True)
4# 按月彙總和顯示
5data = data.resample('m')
6data = data.to_period()
7# 市值改為億元
8market_value = data['total_mv']/10000
9
10# 二者結果分別如下,萬科地產:
112017-01 2291.973270
122017-02 2286.331037
132017-03 2306.894790
142017-04 2266.337906
152017-05 2131.053098
162017-06 2457.716659
172017-07 2686.982164
182017-08 2524.462077
192017-09 2904.085487
202017-10 2976.999550
212017-11 3263.374043
222017-12 3317.107474
23# 保利地產:
242017-01 1089.008286
252017-02 1120.023350
262017-03 1145.731640
272017-04 1153.760435
282017-05 1108.230609
292017-06 1157.276044
302017-07 1244.966905
312017-08 1203.580209
322017-09 1290.706606
332017-10 1244.438756
342017-11 1336.661916
352017-12 1531.150616
3.2. 繪製二元折線圖
利用上面的Series資料就可以作圖了。
1# 設定繪圖風格
2plt.style.use('ggplot')
3fig = plt.figure(figsize = (10,6))
4colors1 = '#6D6D6D' #標題顏色
5
6# data1萬科,data2保利
7data1 = lst[0]
8data2 = lst[1]
9# 繪製第一條折線圖
10data1.plot(
11color = '#C42022', #折線圖顏色
12marker = 'o',markersize = 4, #標記形狀、大小設定
13label = '萬科'
14)
15# 繪製第二條折線圖
16data2.plot(
17color = '#4191C0', #折線圖顏色
18marker = 'o',markersize = 4, #標記形狀、大小設定
19label = '保利'
20)
21# 還可以繪製更多條
22# 設定標題及橫縱座標軸標題
23plt.title('2017年萬科與保利地產市值對比',color = colors1,fontsize = 18)
24plt.xlabel('月份')
25plt.ylabel('市值(億元)')
26plt.savefig('stock1.png',bbox_inches = 'tight',dpi = 300)
27plt.legend() # 顯示圖例
28plt.show()
繪圖結果如下:
如果想新增數值標籤,則可以使用下面的程式碼:
1# 繪製第一條折線圖
2# 建立x,y軸標籤
3x = np.arange(0,len(data1),1)
4ax1.plot(x,data1.values, #x、y座標
5color = '#C42022', #折線圖顏色紅色
6marker = 'o',markersize = 4, #標記形狀、大小設定
7label = '萬科'
8)
9ax1.set_xticks(x) # 設定x軸標籤
10ax1.set_xticklabels(data1.index) # 設定x軸標籤值
11# plt.xticks(rotation=90)
12for x,y in zip(x,data1.values):
13 plt.text(x,y + 10,'%.0f' %y,ha = 'center',color = colors1,fontsize = 10 )
14 # '%.0f' %y 設定標籤格式不帶小數
15
16# 繪製第二條折線圖
17x = np.arange(0,len(data2),1)
18
19ax1.plot(x,data2.values, #x、y座標
20color = '#4191C0', #折線圖顏色藍色
21marker = 'o',markersize = 4, #標記形狀、大小設定
22label = '保利'
23)
24ax1.set_xticks(x) # 設定x軸標籤
25ax1.set_xticklabels(data2.index) # 設定x軸標籤值
26# plt.xticks(rotation=90)
27for x,y in zip(x,data2.values):
28 plt.text(x,y + 10,'%.0f' %y,ha = 'center',color = colors1,fontsize = 10 )
29 # '%.0f' %y 設定標籤格式不帶小數
30
31# 設定標題及橫縱座標軸標題
32plt.title('2017年萬科與保利地產市值對比',color = colors1,fontsize = 18)
33plt.xlabel('月份')
34plt.ylabel('市值(億元)')
35
36plt.savefig('stock1.png',bbox_inches = 'tight',dpi = 300)
37plt.legend() # 顯示圖例
38plt.show()
結果如下圖所示:
可以看到,兩隻股票市值從2017年初開始一直在上漲,萬科的市值是保利的2倍左右。
本文僅簡單提取了兩隻股票的市值資料,只要你願意,3000多隻股票的資料都可以拿來繪圖。
文章程式碼及素材可在下面連結中獲得:
另外,後期可能會在我的部落格中不斷更新、補充本文的內容。如想獲得更多該方面的知識,可點選閱讀原文,或者瀏覽器開啟我的部落格連結。
本文完。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900353/viewspace-2222530/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python視覺化-折線圖Python視覺化
- 資料視覺化圖表之折線圖視覺化
- Echarts資料視覺化:圖表篇(2)—— 折線圖、堆疊面積折線圖Echarts視覺化
- Python視覺化圖系列(1)-----jupyter notebookPython視覺化
- Python繪圖與視覺化Python繪圖視覺化
- Python視覺化-氣泡圖Python視覺化
- Python視覺化-地圖染色Python視覺化地圖
- 前端使用 Konva 實現視覺化設計器(22)- 繪製圖形(矩形、直線、折線)前端視覺化
- 別動不動就畫折線圖了,教你4種酷炫視覺化方法視覺化
- Python畫圖——matplotlib(普通折線圖)Python
- 前端使用 Konva 實現視覺化設計器(19)- 連線線 - 直線、折線前端視覺化
- Python視覺化-散點圖與彩色散點圖Python視覺化
- [資料分析與視覺化] Python繪製資料地圖2-GeoPandas地圖視覺化視覺化Python地圖
- 前端之圖形學-1 資料視覺化前端視覺化
- Python資料視覺化之Pygal圖表型別Python視覺化型別
- 圖撲孿生工廠流水線組態圖視覺化視覺化
- echarts折線圖Echarts
- echarts - 折線圖Echarts
- R : 折線圖
- Python Pandas 時間序列雙軸折線圖Python
- 微信小程式折線圖表折線圖加區域圖微信小程式
- python資料分析與視覺化【思維導圖】Python視覺化
- python 資料視覺化:直方圖、核密度估計圖、箱線圖、累積分佈函式圖Python視覺化直方圖函式
- 資料視覺化編輯平臺上線,小程式也能擁有視覺化圖層視覺化
- R視覺化09|ggplot2-圖層圖形語法 (1)視覺化
- R語言之視覺化①③散點圖+擬合曲線R語言視覺化
- matlab畫折線圖Matlab
- echarts 折線圖拼接Echarts
- 用Python的random模組繪製折線圖Pythonrandom
- 【實戰】通過Python實現疫情地圖視覺化Python地圖視覺化
- python資料視覺化——echartsPython視覺化Echarts
- python 資料視覺化利器Python視覺化
- Python視覺化神器Yellowbrick使用Python視覺化
- 從零開始學Python視覺化(五): 餅圖及環形圖Python視覺化
- python資料視覺化-matplotlib入門(5)-餅圖和堆疊圖Python視覺化
- 資料視覺化如何選擇合適的視覺化圖表?視覺化
- 資料視覺化:圖表篇(1)—— 基本柱狀圖、堆疊柱狀圖視覺化
- ECHARTS-折線圖不顯示資料 控制折線圖顏色Echarts