Python:如何使用plotly制作阴影区域或交替背景颜色?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:如何使用plotly制作阴影区域或交替背景颜色?相关的知识,希望对你有一定的参考价值。

只使用plot.ly中的这几行代码就可以在jupyter笔记本中给出下面的图:

小片1:

import plotly
import cufflinks as cf
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

iplot(cf.datagen.lines().iplot(asFigure=True,
                               kind='scatter',xTitle='Dates',yTitle='Returns',title='Returns'))

情节1:

enter image description here

你如何设置它,以便你可以在下面的图中有交替的bakcground颜色,就像this post使用matplotlib所示?

Here's a link解释了如何添加这样的阴影区域:

摘录2:

df.iplot(vspan='x0':'2015-02-15','x1':'2015-03-15','color':'rgba(30,30,30,0.3)','fill':True,'opacity':.4, 
         filename='cufflinks/custom-regions')

情节2:

enter image description here

谢谢你的任何建议!

答案

正如问题所示,可能的解决方案可能在于vspan功能。然而,使用hspan为y轴添加多个阴影区域似乎要比使用vspan和x轴的情况更容易。后者需要多一点调整。在我建议的解决方案之后可以找到更多细节。


下面的图由下面的代码片段和函数multiShades生成:

情节:

enter image description here

片段:

### Setup from the question ###

import plotly
import cufflinks as cf
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import pandas as pd
import numpy as np
from IPython.display import html
from IPython.core.display import display, HTML
import copy

# setup
init_notebook_mode(connected=True)
np.random.seed(123)
cf.set_config_file(theme='pearl')

# Random data using cufflinks
df = cf.datagen.lines()

fig = df.iplot(asFigure=True, kind='scatter',
               xTitle='Dates',yTitle='Returns',title='Returns',
               vspan='x0':'2015-01-11','x1':'2015-02-22','color':'rgba(30,30,30,0.3)','fill':True,'opacity':.4)

### ANSWER ###

xStart = ['2015-01-11', '2015-02-08', '2015-03-08', '2015-04-05']
xStop = ['2015-01-25', '2015-02-22', '2015-03-22', '2015-04-10']

def multiShades(plot, x0, x1):
    """ Adds shaded areas for specified dates in a plotly plot.
        The lines of the areas are set to transparent using rgba(0,0,0,0)
    """
    # get start and end dates
    x0 = xStart
    x1 = xStop

    # get dict from tuple made by vspan()
    xElem = fig['layout']['shapes'][0]

    # container (list) for dicts / shapes
    shp_lst=[]

    # make dicts according to x0 and X1
    # and edit elements of those dicts
    for i in range(0,len(x0)):
        shp_lst.append(copy.deepcopy(xElem))
        shp_lst[i]['x0'] = x0[i]
        shp_lst[i]['x1'] = x1[i]
        shp_lst[i]['line']['color'] = 'rgba(0,0,0,0)'

    # replace shape in fig with multiple new shapes
    fig['layout']['shapes']= tuple(shp_lst)
    return(fig)

fig = multiShades(plot=fig, x0=xStart, x1=xStop)

iplot(fig)

一些细节:

函数vspan'填充'元组fig['layout']['shapes']与形式的字典:

'fillcolor': 'rgba(187, 187, 187, 0.4)',
 'line': 'color': '#BBBBBB', 'dash': 'solid', 'width': 1,
 'type': 'rect',
 'x0': '2015-01-11',
 'x1': '2015-02-22',
 'xref': 'x',
 'y0': 0,
 'y1': 1,
 'yref': 'paper'

我的函数只需要获取该字典,制作许多副本,根据函数参数编辑这些副本,并用函数中的新元组替换原始元组。

挑战:

添加更多形状时,这种方法可能会有点棘手。此外,日期必须是硬编码的 - 至少有人找到How to retrieve values for major ticks and gridlines?的答案

以上是关于Python:如何使用plotly制作阴影区域或交替背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)使用plot函数可视化训练好的条件推理决策树条件推理决策树的叶子节点的阴影区域表

Python Plotly Express:如何有条件地填充区域图?

如何在 plotly.js 图表中添加彩色背景条

在不使用 Plotly Express 的情况下向 Plotly 子图添加垂直矩形

运行 Django 或任何其他基于 python 的网络框架的最低配置或交钥匙网络服务器?

有没有办法使用 plotly 开始一个已经在特定区域放大的情节?