Plotly python how to draw unbounded lines and spans?

落爺英雄遲暮 提交于 2019-12-23 15:33:46

问题


I am using plotly (the offline version) within an IPython notebook and I like it a lot. However I couldn't find a way to plot a vertical line or a vertical band.

The equivalents in matplotlib are:

import matplotlib.plyplot as plt
plt.axvline(x=0)
plt.axvspan(xmin=0, xmax=1)

thanks in advance


回答1:


You can add shapes to your plotly layout. Shapes can include lines or rectangles. They can also be made unbounded by drawing them relative to the plotting area rather than a particular axis. Have a look through the examples in the plotly shapes docs.

layout = {
        'title': "My Chart",
        'shapes': [
            {  # Unbounded line at x = 4
                'type': 'line',
                # x-reference is assigned to the x-values
                'xref': 'x',
                # y-reference is assigned to the plot paper [0,1]
                'yref': 'paper',
                'x0': 4,
                'y0': 0,
                'x1': 4,
                'y1': 1,
                'line': {
                    'color': 'rgb(55, 128, 191)',
                    'width': 3,
                }
            },
            {  # Unbounded span at 6 <= x <= 8
                'type': 'rect',
                # x-reference is assigned to the x-values
                'xref': 'x',
                # y-reference is assigned to the plot paper [0,1]
                'yref': 'paper',
                'x0': 6,
                'y0': 0,
                'x1': 8,
                'y1': 1,
                'fillcolor': '#d3d3d3',
                'opacity': 0.2,
                'line': {
                    'width': 0,
                }
            }
        ],
    }



回答2:


I'm just starting out with plotly myself, and so far I haven't found a good way to do this. But if you only need one horizontal or vertical line, the code below seems to be a workable hack, The idea is to use the default grid, but only plot a single grid line at the desired height. Include the following in your layout dict, and it will plot a horizontal line at yline.

  yaxis=dict(
         zeroline=False,
         autotick=False,
         showgrid=True,
         tick0=yline,
         dtick=<something very large, so that next lines are out of range>
  )



回答3:


I would use the 'shapes' option in the layout. For example, to get a vertical line at x = 6:

layout = {'title' : 'example',
          'shapes' : [{'type' : 'line', 'x0' : 6, 
                      'x1' : 6, 'y0' : 0, 'y1' : 10, 
                       'width' : 1}]}

You could change the width parameter to plot a vertical band.



来源:https://stackoverflow.com/questions/38150362/plotly-python-how-to-draw-unbounded-lines-and-spans

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!