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

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

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

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

import plotly as py
import plotly.graph_objs as go
import numpy as np

pyplt = py.offline.plot

# 随机生成100个交易日的收益率
s1 = np.random.RandomState(8) # 定义局部种子
s2 = np.random.RandomState(9) # 定义局部种子
rd1 = s1.rand(100)/10 - 0.02
rd2 = s2.rand(100)/10 - 0.02

# 设定初始资金
initial1 = 100000
initial2 = 100000
total1 = []
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 py
import plotly.graph_objs as go
import numpy as np

pyplt = py.offline.plot

# 随机生成100个交易日的收益率
s1 = np.random.RandomState(8) # 定义局部种子
s2 = np.random.RandomState(9) # 定义局部种子
rd1 = s1.rand(100)/10 - 0.02
rd2 = s2.rand(100)/10 - 0.02

# 设定初始资金
initial1 = 100000
initial2 = 100000
total1 = []
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 py
import plotly.graph_objs as go
data_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.plot
fig = go.Figure(data = data, layout = layout)
pyplt(fig, filename = 'tmp/stacked-area-plot.html')

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

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

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

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

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

Python使用Plotly绘图工具,绘制面积图的更多相关文章

  1. Python使用Plotly绘图工具,绘制直方图

    今天我们再来讲解一下Python使用Plotly绘图工具如何绘制直方图 使用plotly绘制直方图需要用到graph_objs包中的Histogram函数 我们将数据赋值给函数中的x变量,x = da ...

  2. Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  3. Python使用Plotly绘图工具,绘制甘特图

    今天来讲一下如何使用Python 的绘图工具Plotly来绘制甘特图的方法 甘特图大家应该了解熟悉,就是通过条形来显示项目的进度.时间安排等相关情况的. 我们今天来学习一下,如何使用ployly来绘制 ...

  4. Python使用Plotly绘图工具,绘制气泡图

    今天来讲讲如何使用Python 绘图工具,Plotly来绘制气泡图. 气泡图的实现方法类似散点图的实现.修改散点图中点的大小,就变成气泡图. 实现代码如下: import plotly as py i ...

  5. Python使用Plotly绘图工具,绘制散点图、线形图

    今天在研究Plotly绘制散点图的方法 使用Python3.6 + Plotly Plotly版本2.0.0 在开始之前先说说,还需要安装库Numpy,安装方法在我的另一篇博客中有写到:https:/ ...

  6. Python使用Plotly绘图工具,绘制水平条形图

    水平条形图与绘制柱状图类似,大家可以先看看我之前写的博客,如何绘制柱状图 水平条形图需要在Bar函数中设置orientation= 'h' 其他的参数与柱状图相同.也可以通过设置barmode = ' ...

  7. Python使用Plotly绘图工具,绘制柱状图

    使用Plotly绘制基本的柱状图,需要用到的函数是graph_objs 中 Bar函数 通过参数,可以设置柱状图的样式. 通过barmod进行设置可以绘制出不同类型的柱状图出来. 我们先来实现一个简单 ...

  8. 【python】pandas & matplotlib 数据处理 绘制曲面图

    Python matplotlib模块,是扩展的MATLAB的一个绘图工具库,它可以绘制各种图形 建议安装 Anaconda后使用 ,集成了很多第三库,基本满足大家的需求,下载地址,对应选择pytho ...

  9. python中matplotlib绘图封装类之折线图、条状图、圆饼图

    DrawHelper.py封装类源码: import matplotlib import matplotlib.pyplot as plt import numpy as np class DrawH ...

随机推荐

  1. ECMAScript5之StrictMode

    ECMAScript5引入一个严格模式的概念(Strict Mode). 它的作用就是不让Javascript的容错那么高,让我们对编写代码的规范要求高一点. 比如,当我们使用严格模式编写JavaSc ...

  2. css3 animation 实现环形路径平移动画

    注意 @keyframes to/from 的学习 <!DOCTYPE html> <html lang="en"> <head> <me ...

  3. java--接口和抽象类

    接口将抽象类的概念更延伸了一步,完全禁止了所有的函数定义.且可以将多个接口合并到一起,但是不能继承多个类.

  4. 怎么样 解决nginx负载均衡的session共享问题呢

    php服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决ses ...

  5. js面试题知识点全解(一原型和原型链1)

    1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...

  6. Unity3d_GUI_2__(能量条的学习)

    这和上一篇有点跳跃,不过GUI有官方文档,而且也可以查看编辑器自带的脚本文档,多看看API,多操作操作,肯定能熟练的.所以这篇我就介绍下一点小技巧,大佬就略过这篇了,不适合大佬,会被你们教育的. 1. ...

  7. android studio编译慢的问题

    1.修改android studio的使用堆内存,根据自己电脑的内存,尽量设置的大一点,点击help->如下图: 2.接下来设置使用离线gradle构建,一开始就是使用了内置的默认路径gradl ...

  8. JS 两个对象数组合并并去重

    JS两个对象数组合并并去重 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. 一道关于:ArrayList、Vector、LinkedList的存储性能和特性 的面试题

    ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...

  10. sublime text 3 3103 注册码

    —– BEGIN LICENSE —– Ryan Clark Single User License EA7E-812479 2158A7DE B690A7A3 8EC04710 006A5EEB 3 ...