Python:如何使用plotly制作阴影区域或交替的背景颜色? [英] Python: How to make shaded areas or alternating background color using plotly?

查看:366
本文介绍了Python:如何使用plotly制作阴影区域或交替的背景颜色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

仅使用 plot.ly

Using only these few lines of code from plot.ly will give you the plot below in a jupyter notebook:

代码段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:

如何设置它,以便在下图中可以交替显示bakcground颜色,如 > matplotlib ?

How can you set it up so you can have alternating bakcground colors in the plot below like it was shown in this post using matplotlib?

这是一个链接,说明了如何添加这样的阴影区域:

Here's a link that explains how to add shaded areas like this:

代码段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:

谢谢您的任何建议!

推荐答案

如问题中所建议的,vspan函数中可能存在解决方案.但是,与使用vspan和x轴的情况相比,使用hspan为y轴添加多个阴影区域似乎要容易得多.后者需要更多调整.在提出建议的解决方案后,可以找到更多详细信息.

As suggested in the question, a possible solution could lie in the vspan function. However, it seemed much easier to add multiple shaded areas for the y-axis using hspan, than the case was with vspan and the x-axis. The latter needed a little more tweaking. More details can be found after my suggested solution.

下面的代码段由下面的代码段和功能multiShades生成:

The following plot is produced by the snippet and function multiShades below:

情节:

代码段:

### 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']:

The function vspan 'fills' the tuple fig['layout']['shapes'] with a dictionary of the form:

{'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'}

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

My function simply takes that dictionary, makes a number of copies, edits those copies according to the function arguments, and replaces the original tuple with a new tuple from the function.

挑战:

当添加更多形状时,此方法可能会有些棘手.此外,必须对日期进行硬编码-至少要等到有人找到

This approach might get a bit tricky when more shapes are added. In addition, the dates have to be hard-coded - atleast until someone finds an answer to How to retrieve values for major ticks and gridlines?

这篇关于Python:如何使用plotly制作阴影区域或交替的背景颜色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆