博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python使用Plotly绘图工具,绘制面积图
阅读量:5157 次
发布时间:2019-06-13

本文共 3845 字,大约阅读时间需要 12 分钟。

今天我们来讲一下如何使用Python使用Plotly绘图工具,绘制面积图

绘制面积图与绘制散点图和折线图的画法类似,使用plotly graph_objs

中的Scatter函数,不同之处在于面积图对fill属性的设置

也就是说,相当于是在折线图的基础上,对图形进行填充

import plotly as pyimport plotly.graph_objs as goimport numpy as nppyplt = py.offline.plot# 随机生成100个交易日的收益率s1 = np.random.RandomState(8) # 定义局部种子s2 = np.random.RandomState(9) # 定义局部种子rd1 = s1.rand(100)/10 - 0.02rd2 = s2.rand(100)/10 - 0.02# 设定初始资金initial1 = 100000initial2 = 100000total1 = []total2 = []for i in range(len(rd1)):    initial1 = initial1*rd1[i] + initial1    initial2 = initial2*rd2[i] + initial2    total1.append(initial1)    total2.append(initial2)trace1 = go.Scatter(#     x = [1, 2, 3, 4],    y = total1,    fill = 'tonexty',    mode= 'none', # 无边界线    name = "策略1")trace2 = go.Scatter(#     x = [1, 2, 3, 4],    y = total2,    fill = 'tozeroy',    mode= 'none',# 无边界线    name = "策略2")data = [trace1, trace2]layout = dict(title = '策略净值曲线',              xaxis = dict(title = '交易天数'),              yaxis = dict(title = '净值'),              )fig = dict(data = data, layout = layout)pyplt(fig, filename='tmp/1.html')

 

 

运行如上代码,会得到如上图所示的图形面积图

展示了两个不同的交易策略的净值曲线图,数据是随机生成的

就相当于做了折线图后,进行了填充得到

我们在来说一下内部填充面积图

内部填充面积图是仅仅填充两条曲线交叉所形成的面积部分,同样设置fill属性来完成。

只需要在原来的面积图上设置第一条曲线无填充效果即可

下面我们来看看代码

import plotly as pyimport plotly.graph_objs as goimport numpy as nppyplt = py.offline.plot# 随机生成100个交易日的收益率s1 = np.random.RandomState(8) # 定义局部种子s2 = np.random.RandomState(9) # 定义局部种子rd1 = s1.rand(100)/10 - 0.02rd2 = s2.rand(100)/10 - 0.02# 设定初始资金initial1 = 100000initial2 = 100000total1 = []total2 = []for i in range(len(rd1)):    initial1 = initial1*rd1[i] + initial1    initial2 = initial2*rd2[i] + initial2    total1.append(initial1)    total2.append(initial2)trace1 = go.Scatter(    y = total1,    fill = None,    mode= 'lines', # 无边界线    name = "策略1")trace2 = go.Scatter(#     x = [1, 2, 3, 4],    y = total2,    fill = 'tonexty',    mode= 'lines',# 无边界线    name = "策略2")data = [trace1, trace2]layout = dict(title = '策略净值曲线',              xaxis = dict(title = '交易天数'),              yaxis = dict(title = '净值'),              )fig = dict(data = data, layout = layout)pyplt(fig, filename='tmp/1.html')

 

运行上诉代码,我们可以得到如上图所示的内部填充面积图

我们设置了fill = None,

在设置第二条曲线的填充的效果为tonexty

即fill = 'tonexty' 即可得到如上图所示的图例

接下来我们讲解一下堆积面积图

堆积面积图与之前我写的博客中,层叠柱状图类似

都是展示了数据累加的效果

不同之处在于对数据的设置

import plotly as pyimport plotly.graph_objs as godata_1 = go.Scatter(    x = ['基金1', '基金2', '基金3', '基金4','基金5'],    y = [32.52, 43.12, 43.47, 44.36, 33.11],    name = '股票投资',    mode = 'lines',    line = dict(width=0.5,              color = 'rgb(184, 247, 212)'),    fill = 'tonexty')data_2 = go.Scatter(    x = ['基金1', '基金2', '基金3', '基金4','基金5'],    y = [63.24, 54.33, 74.28, 63.91, 63.11],    name = '其它投资',    mode = 'lines',    line = dict(width=0.5,              color = 'rgb(111, 231, 219)'),    fill = 'tonexty')data_3 = go.Scatter(    x = ['基金1', '基金2', '基金3', '基金4','基金5'],    y = [83.24, 74.33, 93.91, 79.22, 83.11],    name='债券投资',    mode='lines',    line=dict(width=0.5,              color='rgb(127, 166, 238)'),    fill='tonexty')data_4 = go.Scatter(    x = ['基金1', '基金2', '基金3', '基金4','基金5'],    y = [100, 100, 100, 100, 100],    name='银行存款',    mode='lines',    line=dict(width=0.5,              color='rgb(131, 90, 241)'),    fill='tonexty')data = [data_1, data_2, data_3, data_4]layout = go.Layout(    title = '基金资产配置比例图',    showlegend = True,    xaxis = dict(        type = 'category',    ),    yaxis = dict(        type = 'linear',        range = [1, 100],        dtick = 20,        ticksuffix = '%'    ))pyplt = py.offline.plotfig = go.Figure(data = data, layout = layout)pyplt(fig, filename = 'tmp/stacked-area-plot.html')

 

可以看到,运行上诉代码,可以得到如上图所示的堆积面积图图例

注意的是,在绘制层叠柱状图时需要设置stack模式,而绘制堆积面积图时则不需要

这就是堆积面积图需要累加数据的原因

在本质上,堆积面积图的堆积效果是在同一个图形中绘制对个面积图来实现

今天就讲到这里,谢谢大家阅读,感谢支持!谢谢点赞

 

转载于:https://www.cnblogs.com/ws17345067708/p/10653097.html

你可能感兴趣的文章
OO学习总结与体会
查看>>
虚拟机长时间不关造成的问题
查看>>
校门外的树2 contest 树状数组练习 T4
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>