ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

画图:matplotlib模块

2021-03-14 11:06:08  阅读:196  来源: 互联网

标签:loc 13 plt return HS300 画图 matplotlib fontsize 模块


结合金融场景演示Matplotlib模块的操作

一、数据来源——Tushare

Tushare大数据开放社区免费提供各类金融数据。数据丰富:拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据;获取简单:SDK开发包支持语言,同时提供HTTP Restful接口,最大程度方便不同人群的使用;落地方便:提供多种数据储存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,为数据获取提供了性能保证。

二、成果展示

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl  
mpl.rcParams['font.sans-serif']=['SimHei']  #以黑体的字体显示中文
mpl.rcParams['axes.unicode_minus']=False  #解决保存图像是负号'-'显示为方块的问题
beta=np.linspace(0.5,2.0,100)  #一个beta的数组
Rf=0.03
Rm=0.12
Ri=Rf+beta*(Rm-Rf)
plt.figure(figsize=(9,6))
plt.plot(beta,Ri,'r-',label=u'证券市场线',lw=2.0)
plt.plot(1.0,Rf+1.0*(Rm-Rf),'o',lw=2.5)
plt.axis('tight')
plt.xticks(fontsize=14)
plt.xlabel(u'贝塔值',fontsize=14)
plt.xlim(0.4,2.1)
plt.yticks(fontsize=14)
plt.ylabel(u'单一股票收益率',fontsize=14,rotation=0)
plt.ylim(0.07,0.22)
plt.title(u'资本资产定价模型',fontsize=14)
#annotate:添加图形内容细节的指向型注释文本
plt.annotate(u'贝塔等于1 的收益',fontsize=14,xy=(1.0,0.12),xytext=(0.8,0.15),arrowprops=dict(facecolor='b',shrink=0.05))
plt.legend(loc=0,fontsize=14)
plt.grid()

在这里插入图片描述

import tushare as ts
pro=ts.pro_api()
HS300 = pro.index_daily(ts_code='399300.SZ', start_date='20160101', end_date='20190101')  #导入沪深300数据
HS300.head(3).append(HS300.tail(3))
ts_codetrade_datecloseopenhighlowpre_closechangepct_chgvolamount
0399300.SZ201812283010.65362994.79503024.35252984.81772990.505720.14790.673771053779.07.814531e+07
1399300.SZ201812272990.50573042.94913047.23482990.50573002.0327-11.5270-0.384080541785.08.115927e+07
2399300.SZ201812263002.03273012.86903029.06082996.48293017.2815-15.2488-0.505455647032.05.857497e+07
728399300.SZ201601063539.80803482.40603543.73903468.46703478.780061.02801.7543145966144.01.609472e+08
729399300.SZ201601053478.78003382.17703518.21703377.28003469.06609.71400.2800162116984.01.960171e+08
730399300.SZ201601043469.06603725.85603726.24503468.94903731.0050-261.9390-7.0206115370674.01.459682e+08
HS300_new=HS300.set_index('trade_date') #将时间作为索引
HS300_new=HS300_new.sort_index(axis=0,ascending=True)  #按照行索引由小到大排序
HS300_new.head(3).append(HS300_new.tail(3))  #查看首尾三行
ts_codecloseopenhighlowpre_closechangepct_chgvolamount
trade_date
20160104399300.SZ3469.06603725.85603726.24503468.94903731.0050-261.9390-7.0206115370674.01.459682e+08
20160105399300.SZ3478.78003382.17703518.21703377.28003469.06609.71400.2800162116984.01.960171e+08
20160106399300.SZ3539.80803482.40603543.73903468.46703478.780061.02801.7543145966144.01.609472e+08
20181226399300.SZ3002.03273012.86903029.06082996.48293017.2815-15.2488-0.505455647032.05.857497e+07
20181227399300.SZ2990.50573042.94913047.23482990.50573002.0327-11.5270-0.384080541785.08.115927e+07
20181228399300.SZ3010.65362994.79503024.35252984.81772990.505720.14790.673771053779.07.814531e+07
HS300_new['open'].plot()
plt.grid()

在这里插入图片描述

plt.figure(figsize=(11,9))
plt.subplot(2,2,1)  #代表第1行,第1列的子图,即第一幅图
plt.plot(HS300['open'],'r-',label=u'沪深300开盘点位',lw=2.0)
plt.xticks(fontsize=13,rotation=30)
plt.xlabel(u'日期',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'点位',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid()
plt.subplot(2,2,2)  #代表第1行,第2列的子图,即第二幅图
plt.plot(HS300['high'],'b-',label=u'沪深300最高点位',lw=2.0)
plt.xticks(fontsize=13,rotation=30)
plt.xlabel(u'日期',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'点位',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid()
plt.subplot(2,2,3)
plt.plot(HS300['low'],'c-',label=u'沪深300最低点位',lw=2.0)
plt.xticks(fontsize=13,rotation=30)
plt.xlabel(u'日期',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'点位',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid()
plt.subplot(2,2,4)
plt.plot(HS300['close'],'k-',label=u'沪深300收盘点位',lw=2.0)
plt.xticks(fontsize=13,rotation=30)
plt.xlabel(u'日期',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'点位',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid()

在这里插入图片描述

import numpy.random as npr
I=1000
x_norm=npr.normal(loc=0.8,scale=1.5,size=I)  #从均值为0.8,标准差为1.5的正态分布中抽取I个样本
x_logn=npr.lognormal(mean=0.8,sigma=1.0,size=I)  #从均值为0.8,标准差为1.5的对数正态分布中抽取I个样本
x_chi=npr.chisquare(df=4,size=I)  #从自由度为4的卡方分布中抽取I个样本
x_beta=npr.beta(a=2,b=4,size=I)  #从alpha=2,beta=4的贝塔分布中抽取I个样本
plt.figure(figsize=(12,10))
plt.subplot(2,2,1)
plt.hist(x_norm,label=u'正太分布的抽样',bins=20,facecolor='y',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,2)
plt.hist(x_logn,label=u'对数正太分布的抽样',bins=20,facecolor='r',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,3)
plt.hist(x_chi,label=u'卡方分布的抽样',bins=20,facecolor='b',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,4)
plt.hist(x_beta,label=u'贝塔分布的抽样',bins=20,facecolor='c',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)

在这里插入图片描述

x_normal=npr.normal(loc=0.8,scale=1.5,size=(I,2))  #从均值0.8,标准差1.5的正态分布中抽取样本并生成1000行、2列的数组
plt.figure(figsize=(8,5))
plt.hist(x_normal,label=[u'正态分布的抽样数组 1',u'正态分布的抽样数组 2'],stacked=True,edgecolor='k',bins=30)  
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13)
plt.title(u'正态分布随机抽取的两组样本值堆叠的直方图')
plt.legend(loc=0,fontsize=13)
plt.grid(True)

在这里插入图片描述

plt.figure(figsize=(8,5))
plt.hist(x_normal,label=[u'正态分布的抽样数组 1',u'正态分布的抽样数组 2'],edgecolor='k',bins=30)
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13)
plt.title(u'正态分布随机抽取的两组样本值并排的直方图')
plt.legend(loc=0,fontsize=13)
plt.grid(True)

在这里插入图片描述

return_list=[0.003731,0.021066,-0.004854,0.006098,-0.006061,-0.001838,0.001842,
-0.016544,-0.003738,0.003752,-0.003087,-0.000344,-0.033391,0.007123,0.004597,-0.024112,
0.011704,-0.029563,-0.014570,0.016129]
return_array=np.array(return_list)
return_array=return_array.reshape(4,5)
date=['2018-09-03','2018-09-04','2018-09-05','2018-09-06','2018-09-07']
stock=['中国石油','工商银行','上汽集团','宝钢股份']
return_dataframe=pd.DataFrame(data=return_array.T,index=date,columns=stock)
return_dataframe
中国石油工商银行上汽集团宝钢股份
2018-09-030.003731-0.001838-0.003087-0.024112
2018-09-040.0210660.001842-0.0003440.011704
2018-09-05-0.004854-0.016544-0.033391-0.029563
2018-09-060.006098-0.0037380.007123-0.014570
2018-09-07-0.0060610.0037520.0045970.016129
plt.figure(figsize=(12,10))
plt.subplot(2,2,1)
plt.bar(x=return_dataframe.columns,height=return_dataframe.iloc[0],width=0.5,label=u'2018年9月3日涨跌幅',facecolor='y')
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.ylim(-0.035,0.025)
plt.ylabel(u'涨跌幅',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,2)
plt.bar(x=return_dataframe.columns,height=return_dataframe.iloc[2],width=0.5,label=u'2018年9月5日涨跌幅',facecolor='c')
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.ylim(-0.035,0.025)
plt.ylabel(u'涨跌幅',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,3)
plt.bar(x=return_dataframe.columns,height=return_dataframe.iloc[3],width=0.5,label=u'2018年9月6日涨跌幅',facecolor='b')
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.ylim(-0.035,0.025)
plt.ylabel(u'涨跌幅',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,4)
plt.bar(x=return_dataframe.columns,height=return_dataframe.iloc[4],width=0.5,label=u'2018年9月7日涨跌幅',facecolor='g')
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.ylim(-0.035,0.025)
plt.ylabel(u'涨跌幅',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)

在这里插入图片描述

plt.figure(figsize=(9,6))
plt.barh(y=return_dataframe.columns,width=return_dataframe.iloc[3],height=0.5,label=u'2018年9月6日涨跌幅')
plt.barh(y=return_dataframe.columns,width=return_dataframe.iloc[4],height=0.5,label=u'2018年9月7日涨跌幅')
plt.xticks(fontsize=13)
plt.xlabel(u'涨跌幅',fontsize=13)
plt.yticks(fontsize=13)
plt.title(u'水平条形图可视化股票的涨跌幅',fontsize=13)
plt.legend(loc=0,fontsize=13)
plt.grid(True)

在这里插入图片描述

SZ = pro.index_daily(ts_code='000001.SH', start_date='20160101', end_date='20190101')  #上证指数
HS = pro.index_daily(ts_code='399300.SZ', start_date='20160101', end_date='20190101')  #沪深指数
SZ.head()
ts_codetrade_datecloseopenhighlowpre_closechangepct_chgvolamount
0000001.SH201812282493.89622483.61712505.11382478.32502483.086410.80980.4353119245250.0105980853.0
1000001.SH201812272483.08642527.71672532.00222483.08642498.2939-15.2075-0.6087135406843.0112479760.5
2000001.SH201812262498.29392501.11992513.82642492.07582504.8190-6.5251-0.2605108799629.093989532.6
3000001.SH201812252504.81902503.94982513.96412462.84482527.0070-22.1880-0.8780140670560.0114766008.8
4000001.SH201812242527.00712506.73722529.43952500.44302516.250510.75660.427597339852.085760935.8
SZ=SZ.set_index('trade_date')
SZ=SZ.rename(columns={'pct_chg':'上证涨跌幅'})
HS=HS300.set_index('trade_date') #将时间作为索引
HS=HS.rename(columns={'pct_chg':'沪深300涨跌幅'})
HS300_SZ=pd.concat([HS['沪深300涨跌幅'],SZ['上证涨跌幅']],axis=1)  #按列合并
HS300_SZ
沪深300涨跌幅上证涨跌幅
trade_date
201812280.67370.4353
20181227-0.3840-0.6087
20181226-0.5054-0.2605
20181225-0.6885-0.8780
201812240.29060.4275
.........
201601082.03921.9651
20160107-6.9333-7.0449
201601061.75432.2547
201601050.2800-0.2593
20160104-7.0206-6.8638

731 rows × 2 columns

plt.figure(figsize=(9,6))
plt.scatter(x=HS300_SZ.iloc[:,0],y=HS300_SZ.iloc[:,1],c='m',marker='o')
plt.xticks(fontsize=14)
plt.xlabel(u'沪深300指数涨跌幅',fontsize=14)
plt.yticks(fontsize=14)
plt.ylabel(u'上证指数涨跌幅',fontsize=14)
plt.title(u'沪深300指数与上证指数的涨跌幅散点图',fontsize=14)
plt.grid()

在这里插入图片描述

currency=['美元','欧元','人民币','日元','英镑']
perc=[0.4173,0.3093,0.1092,0.0833,0.0809]
plt.figure(figsize=(9,7))
plt.pie(x=perc,labels=currency)
plt.axis('equal')  #使饼图是一个圆形
plt.legend(loc=1,fontsize=13)
plt.title(u'特别提款权中不同币种的占比',fontsize=13)
plt.show()

在这里插入图片描述

参考书目:基于python的金融分析与风险管理第5章(斯文著)

标签:loc,13,plt,return,HS300,画图,matplotlib,fontsize,模块
来源: https://blog.csdn.net/weixin_44558273/article/details/114778985

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有