python 金融应用(三)数据可视化
matplotlib 库( http://www.matp1otlìb.org )的基本可视化功能。
主要是2-D绘图、金融绘图和3-D绘图
一.2-D绘图
1.1一维数据集
#导入所需要的包
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1000)
y=np.random.standard_normal(20) #生成20个正太分布随机数
x=range(len(y)) #简单的绘图
plt.plot(x,y)
其实,不需要输入x参数也可以绘图,因为plot 会注意到何时传递了ndarray 对象。在这种情况下,没有必要提供x 值的"额外"信息, 如果你只提供y 的, plot 以索') I 值作为对应的x 值、因此,下面一行代码会生成完全一样的输出。
plt.plot(y)
还可以传递附加方法:
plt.plot(y.cumsum()) #对y的累计求和
还可以操作细节,
plt.plot(y.cumsum())
plt.grid(True) #添加表格
plt.axis('tight') #显示x轴的全刻度
plt.xlim(-1,20) #规定x轴最大、最小值
plt.ylim(np.min(y.cumsum())-1,np.max(y.cumsum())+1)
plt.show()
plt.axis具体参数:
Empty :返回 当前坐标轴限值
off :关闭做标轴线相标签
equal :使用等刻度
scalcd :通过尺寸变化平衡刻度
tight :使所有 数据可见{缩小限值)
Image: 使所有数据可见(使用数据限值)
[xmin、xmax, ymin, ymax] :将设置限定为给定(一组)值
plt.figure(figsize=(12,8))
plt.plot(y.cumsum(),'b',lw=1.5)
plt.plot(y.cumsum(),'ro')
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.title('A simple picture')
plt.show()
颜色
可以通过调用matplotlib.pyplot.colors()
得到matplotlib支持的所有颜色。
别名 | 颜色 | 别名 | 颜色 | |
---|---|---|---|---|
b | 蓝色 | g | 绿色 | |
r | 红色 | y | 黄色 | |
c | 青色 | k | 黑色 | |
m | 洋红色 | w | 白色 |
线条标记
标记maker | 描述 | 标记 | 描述 | |
---|---|---|---|---|
‘o’ | 圆圈 | ‘.’ | 点 | |
‘D’ | 菱形 | ‘s’ | 正方形 | |
‘h’ | 六边形1 | ‘*’ | 星号 | |
‘H’ | 六边形2 | ‘d’ | 小菱形 | |
‘_’ | 水平线 | ‘v’ | 一角朝下的三角形 | |
‘8’ | 八边形 | ‘<’ | 一角朝左的三角形 | |
‘p’ | 五边形 | ‘>’ | 一角朝右的三角形 | |
‘,’ | 像素 | ‘^’ | 一角朝上的三角形 | |
‘+’ | 加号 | ‘\’ | 竖线 | |
‘None’,’’,’ ‘ | 无 | ‘x’ | X |
用来该表线条的属性
风格linestyle或ls | 描述 | 线条风格linestyle或ls | 描述 | |
---|---|---|---|---|
‘-‘ | 实线 | ‘:’ | 虚线 | |
‘–’ | 破折线 | ‘None’,’ ‘,’’ | 什么都不画 | |
‘-.’ | 点划线 |
1.2 二维数据集
np.random.seed(2000)
y=np.random.standard_normal((20,2)).cumsum(axis=0) #axis=0 按列累加求和 plt.figure(figsize=(8,6))
plt.plot(y,lw=1.5)
plt.plot(y,'ro')
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.title('A simple plot')
plt.show()
添加图例
plt.figure(figsize=(8,6))
plt.plot(y[:,0],lw=1.5,label='1st')
plt.plot(y[:,1],lw=1.5,label='2st')
plt.plot(y,'ro')
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.legend(loc=0)
plt.title('A simple plot')
plt.show()
图例位置参数:
plt.legend(loc='’)
0: ‘best'
1: ‘upper right'
2: ‘upper left'
3: ‘lower left'
|
4: ‘lower right'
5: ‘right'
6: ‘center left'
|
7: ‘center right'
8: ‘lower center'
9: ‘upper center'
10: ‘center'
|
使用双坐标轴
y[:,0]=y[:,0]*100
fig,ax1=plt.subplots(figsize=(8,6))
plt.plot(y[:,0],'c',lw=1.5,label='1st')
plt.plot(y[:,0],'ro')
plt.legend(loc=8)
ax2=ax1.twinx() #添加另一个坐标轴
plt.plot(y[:,1],lw=1.5,label='2st')
plt.plot(y[:,1],'ro')
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.legend(loc=0)
plt.title('A simple plot')
plt.show()
画两个子图plt.figure(figsize=(8,6))
plt.figure(figsize=(8,6))
plt.subplot() #2x1 第一个子图
plt.plot(y[:,0],'c',lw=1.5,label='1st')
plt.plot(y[:,0],'ro')
plt.legend(loc=0) plt.subplot() #两行一列 第二个子图
plt.plot(y[:,1],'g',lw=1.5,label='2st')
plt.plot(y[:,1],'ro')
plt.legend(loc=0) plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.title('A simple plot')
plt.show()
不同种类的两个子图
plt.figure(figsize=(8,6))
plt.subplot(211)
plt.plot(y[:,0],'c',lw=1.5,label='1st')
plt.plot(y[:,0],'ro')
plt.legend(loc=0)
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.title('1 dataset')
plt.subplot(212)
plt.bar(np.arange(len(y)),y[:,1],color='g',width=0.5,label='2st') #条形图
plt.legend(loc=0)
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.title('2nd dataset')
plt.show()
其他绘图样式
散点图
np.random.seed(2000)
y=np.random.standard_normal((2000,2)) plt.figure(figsize=(8,6))
plt.scatter(y[:,0],y[:,1])
plt.grid(True)
plt.xlabel('1 data')
plt.ylabel('2 data')
plt.show()
plt.figure(figsize=(8,6))
plt.plot(y[:,0],y[:,1],color='r',marker='o')
plt.grid(True)
plt.xlabel('1 data')
plt.ylabel('2 data')
plt.show()
scatter 绘图函数可以加入第三维,通过不同的颜色进行可视化.并使用彩条加以描述。为此,我们用随机数据生成第三个数据集,这次使用的是0 和10 之间的整数:
展示的散点图有不同颜色小点表示的第三维,还有作为颜色图例的影条:
c = np.random.randint(0, 10, len(y))
plt.figure(figsize=(7,5))
plt.scatter(y[: , 0], y [ : , 1] , c=c , marker ='o')
plt.colorbar()
plt.grid(True)
plt.xlabel('lst')
plt.ylabel('2nd')
plt.title('Scatter Plot')
直方图
plt.figure(figsize=(7,4))
plt.hist(y,label=['1st','2en'],bins=20) #bins=20 代表分为20组
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('index')
plt.ylabel('value')
plt.show()
详解hist函数
matplotlib.pyplot.hist(
x, bins=10, range=None, normed=False,
weights=None, cumulative=False, bottom=None,
histtype=u'bar', align=u'mid', orientation=u'vertical',
rwidth=None, log=False, color=None, label=None, stacked=False,
hold=None, **kwargs)
参数描述:
x :列表对象 ndarray 对象
bins: 数据组( bin )数
range: 数据组的下界和上界
nonned :规范化为整数1
weights: x 轴上每个值的权重
cumulative: 每个数据组包含较低组别的计数
hisstype :选项(字符串): ar, barstacked, step、stepfìlled
align: 选项(字符串): left, mid, righl
onentatlon: 选项(字符串): horizontal, vertical
rwideth:条块的相对宽度
log :对数刻度
color :每个数据集的颜色(类似数组)
label :标签所用的字符串或者字符串序列
stacked :堆叠多个数据集
两个数据集的数据在直方图的堆叠,只需要修改hist中参数:
plt.figure(figsize=(7,4))
plt.hist(y,label=['1st','2en'],bins=20)
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('index')
plt.ylabel('value')
plt.show()
箱型图
fig,ax=plt.subplots(figsize=(7,4))
plt.boxplot(y)
plt.setp(ax,xticklabels=['1st','2nd']) # 设置(一组)图表的实例的属性
plt.grid(True)
plt.xlabel('value')
plt.ylabel('fre')
plt.show()
data=np.random.standard_normal(20)
lin=plt.plot(data,'r')
plt.setp(lin,linestyle='-')
plt.show()
将线的样式更改为"短划线"
生成积分曲线
#1:积分函数
def fun(x):
return 0.5*np.exp(x)+1 #2:定义积分区
a,b=0.5,1.5
x=np.linspace(0,2)
y=fun(x) #3:绘制函数图像
fig,ax=plt.subplots(figsize=(7,4))
plt.plot(x,y,'r',lw=1.5)
plt.ylim(ymin=0) from matplotlib.patches import Polygon
#4:使用Polygon 函数生成阴影部分(‘补丁’),表示积分面积:
Ix=np.linspace(a,b)
Iy=fun(x)
verts=[(a,0)]+ list(zip(Ix,Iy)) +[(b,0)] #zip把列表转化为元组l1= [1,2,3] l2=[2,3,4] lsit(zip(l1,l2))=[(1,2),(2,3),(3,4)]
poly = Polygon(verts, facecolor ='0.9',edgecolor='0.1')
ax.add_patch(poly) plt.text(0.5 * (a + b) , 1, r"$\int_a^b f(x)\mathrm{d}x$" ,horizontalalignment='center' , fontsize=20)
plt.figtext(0.9, 0.075, '$X$')
plt.figtext(0.075, 0.9, '$f(x)$') ax.set_xticks((a, b))
ax.set_xticklabels(('$a$' , '$b$' ))
ax.set_yticks( [ fun(a) , fun(b)])
ax . set_yticklabels(('$f(a)$' , '$f(b)$'))
plt.grid(True)
plt.show()
二 .3-D绘图
strike = np.linspace(50, 150, 24)
ttm = np.linspace(0.5, 2.5, 24)
strike, ttm = np.meshgrid(strike, ttm) iv = (strike - 100) ** 2 / (100 *strike) / ttm
# generate fake implied νolatilities from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(9, 6))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(strike, ttm, iv, rstride=2 , cstride=2,
cmap=plt.cm.coolwarm, linewidth=0.5,
antialiased=True)
ax.set_xlabel('strike')
ax.set_ylabel('time-to-maturity')
ax.set_zlabel('implied volatility')
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
plot_surface 参数
X, Y, Z :2D 数组形式的数据值
rstride :数组行距(步长大小)
cstride: 数组列距(步长大小)
color: 曲面块颜包
cmap: 曲面峡颜色映射
facecolors :单独曲面块表面'颜包
norm :将值映射为颜色的Normalize 实例
Vmin:映射的最小值
vmax :映射的最大值
还有可以用view_init 设置不同的视角:
fig = plt.figure(figsize=(8, 5))
ax = fig.add_subplot(111,projection='3d')
ax.view_init(30, 60)
ax.scatter(strike, ttm, iv, zdir='z' , s=25,
c='b' , marker='^')
ax.set_xlabel('strike')
ax.set_ylabel('time-to-maturity')
ax.set_zlabel('implied volatili ty')
plt.show()
python 金融应用(三)数据可视化的更多相关文章
- 5 种使用 Python 代码轻松实现数据可视化的方法
数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...
- [转]5 种使用 Python 代码轻松实现数据可视化的方法
数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...
- 《Python数据分析》笔记——数据可视化
数据可视化 matplotlib绘图入门 为了使用matplotlib来绘制基本图像,需要调用matplotlib.pyplot子库中的plot()函数 import matplotlib.pyplo ...
- python 科学计算及数据可视化
第一步:利用python,画散点图. 第二步:需要用到的库有numpy,matplotlib的子库matplotlib.pyplot numpy(Numerical Python extensions ...
- python 金融网贷数据,pandas进行数据分析并可视化系列 (词频统计,基本操作)
需求: 某某金融大亨想涉足金融网贷,想给网贷平台取一个名字,那么取什么名字,名字里面包含哪些关键字,在行业内的曝光率会相比较高一些呢? 可以理解为: 你负责某某网贷平台的网络推广工作,如何进一步优化各 ...
- 使用Python写词云数据可视化
词云的应用场景 会议记录 海报制作 PPT制作 生日表白 数据挖掘 情感分析 用户画像 微信聊天记录分析 微博情感分析 Bilibili弹幕情感分析 年终总结 安装本课程所需的Python第三方模块 ...
- python grib气象数据可视化
基于Python的Grib数据可视化 利用Python语言实现Grib数据可视化主要依靠三个库——pygrib.numpy和matplotlib.pygrib是欧洲中期天气预报中心 ...
- 使用bokeh-scala进行数据可视化
目录 前言 bokeh简介及胡扯 bokeh-scala基本代码 我的封装 总结 一.前言 最近在使用spark集群以及geotrellis框架(相关文章见http://www.cnbl ...
- 利用selenium 爬取豆瓣 武林外传数据并且完成 数据可视化 情绪分析
全文的步骤可以大概分为几步: 一:数据获取,利用selenium+多进程(linux上selenium 多进程可能会有问题)+kafka写数据(linux首选必选耦合)windows直接采用的是写my ...
- python金融与量化分析------Matplotlib(绘图和可视化)
-----------------------------------------------------------Matplotlib:绘图和可视化------------------------ ...
随机推荐
- Javascript模块化开发2——Gruntfile.js详解
一.grunt模块简介 grunt插件,是一种npm环境下的自动化工具.对于需要反复重复的任务,例如压缩.编译.单元测试.linting等,自动化工具可以减轻你的劳动,简化你的工作.grunt模块根据 ...
- 初识web API接口及Restful接口规范
一.web API接口 什么是web API接口?: 明确了请求方式,提供对应后台所需参数,请求url链接可以得到后台的响应数据 url : 返回数据的url https://api.map.baid ...
- Apache中AllowOverride的详细配置使用
我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.hta ...
- GitHub注册失败,卡在第一步
同事说他无法注册GitHub,我一开始以为GitHub又无法登录进去,我就登录了自己的GitHub账号,没有问题,可以登录啊,见第一个标签页.同一局域网,不可能我能登录,你无法完成注册啊.于是,我就在 ...
- Spring Boot (一) 校验表单重复提交
一.前言 在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据. 存在如上问题可以交给前端解决,判断多长时间内不能再次点 ...
- 线程中synchronized关键字和lock接口的异同
一.synchronized关键字 1.可以用来修饰代码块 synchronized (this) { // 同步的关键字 this 表示当前线程对象 if (num == 0) { break; } ...
- 作业要求20191010-8 alpha week 1/2 Scrum立会报告+燃尽图 06
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8751 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩 ...
- RNN-LSTM讲解-基于tensorflow实现
cnn卷积神经网络在前面已经有所了解了,目前博主也使用它进行了一个图像分类问题,基于kaggle里面的food-101进行的图像识别,识别率有点感人,基于数据集的关系,大致来说还可行.下面我就继续学习 ...
- 2019-10-23:渗透测试,基础学习,DVWA,Medium和Hight级别sql注入
VWA的Medium和Hight级别sql注入 一,Medium级 服务端代码 <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get inp ...
- 2019-9-29,php基础学习,笔记
cobalt strike简单使用cobalt是一个后渗透测试工具,基于java开发,适用于团队间协同作战,简称"cs"cs分为客户端和服务端,一般情况下我们称服务端为团队服务器, ...