Search code examples
pythonbqplot

Apply colormap to line (or segments) using bqplot


Is it possible to apply a colormap to a line using bqplot?

Using matplotlib, one can split the line into segments, collate them and apply the colormap with with matplotlib.collections.LineCollection(segments, cmap='RdBu').set_array(c), and then plot it all with axis.add_collection().

However, I cannot find equivalent methods in bqplot. Am I missing anything?


Solution

  • The flexline mark will do this. See example below (taken from https://github.com/bloomberg/bqplot/blob/master/examples/Marks/Object%20Model/FlexLine.ipynb)

    from bqplot import *
    
    ## Get Data
    
    dates = np.arange('2005-02', '2005-03', dtype='datetime64[D]')
    size = len(dates)
    spx = 100 + 5 * np.cumsum(np.random.randn(size))
    vix = 10 + np.cumsum(np.random.randn(size))
    
    ## Displaying extra dimension with color
    
    lin_x = DateScale()
    lin_y = LinearScale()
    col_line = ColorScale(colors=['green', 'white', 'red'])
    
    ax_x = Axis(scale=lin_x, label='Date', label_location='end')
    ax_y = Axis(scale=lin_y, orientation='vertical', label='Index', label_offset='4ex')
    ax_col = ColorAxis(label='Vol', scale=col_line, tick_format='0.2f')
    
    fig_margin = dict(top=50, left=80, right=20, bottom=70)
    fl = FlexLine(x=dates, y=spx, color=vix,
                  scales={'x': lin_x, 'color': col_line, 'y': lin_y})
    
    Figure(marks=[fl], axes=[ax_x, ax_y, ax_col], fig_margin=fig_margin)
    

    enter image description here