Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Increasing opacity of area plot in plotly

How do I increase the opacity or alpha of the 'filled' area of my plot? I tried:

import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
import cufflinks as cf
from plotly import tools

plotly.offline.init_notebook_mode() 
cf.go_offline()


df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.iplot(kind='area', fill=True, filename='cuflinks/stacked-area', opacity=.1)

but it doesn't seem to work.

like image 783
nrs90 Avatar asked Feb 02 '26 13:02

nrs90


1 Answers

There doesn't seem to be an easy built-in way of achieving this. However, a work-around is to first get the figure object of the plot, modify it to change the opacity, and then plot it.

You can get the figure object using the asFigure attribute like this:

figure = df.iplot(asFigure=True, kind='area', fill=True, filename='cuflinks/stacked-area')

The figure object in this case looks like:

Figure({
    'data': [{'fill': 'tonexty',
              'fillcolor': 'rgba(255, 153, 51, 0.3)',
              'line': {'color': 'rgba(255, 153, 51, 1.0)', 'dash': 'solid', 'shape': 'linear', 'width': 1.3},
              'mode': 'lines',
              'name': 'a',
              'text': '',
              'type': 'scatter',
              'uid': '4dcc1a3e-fba3-4a32-bb2a-40925b4fae5b',
              'x': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64),
              'y': array([0.91229144, 0.63049138, 0.22855077, 0.13470399, 0.9114691 , 0.39640368,
                          0.46534334, 0.20508211, 0.00203548, 0.41343938])},
             {'fill': 'tonexty',
              'fillcolor': 'rgba(55, 128, 191, 0.3)',
              'line': {'color': 'rgba(55, 128, 191, 1.0)', 'dash': 'solid', 'shape': 'linear', 'width': 1.3},
              'mode': 'lines',
              'name': 'b',
              'text': '',
              'type': 'scatter',
              'uid': '1015b30d-7c09-456c-875c-8a211a6ebdeb',
              'x': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64),
              'y': array([1.81115175, 1.57534372, 0.41288126, 0.38068805, 1.72268856, 0.87778503,
                          1.32714727, 0.848242  , 0.51605283, 0.58190402])},
             {'fill': 'tonexty',
              'fillcolor': 'rgba(50, 171, 96, 0.3)',
              'line': {'color': 'rgba(50, 171, 96, 1.0)', 'dash': 'solid', 'shape': 'linear', 'width': 1.3},
              'mode': 'lines',
              'name': 'c',
              'text': '',
              'type': 'scatter',
              'uid': '7d1852ac-b8e7-44e6-ae69-54229d7e2c83',
              'x': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64),
              'y': array([2.79222081, 1.58812634, 1.1439478 , 1.30453731, 2.50881795, 1.67681961,
                          1.85609861, 1.36657712, 0.89024486, 0.82749039])},
             {'fill': 'tonexty',
              'fillcolor': 'rgba(128, 0, 128, 0.3)',
              'line': {'color': 'rgba(128, 0, 128, 1.0)', 'dash': 'solid', 'shape': 'linear', 'width': 1.3},
              'mode': 'lines',
              'name': 'd',
              'text': '',
              'type': 'scatter',
              'uid': '89b85012-fc95-487c-b7ba-9cb6c249b768',
              'x': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64),
              'y': array([3.54740551, 1.79856232, 2.1326556 , 2.10560567, 2.64867039, 2.55519564,
                          2.73888819, 2.23274393, 1.16987343, 1.42794202])}],
    'layout': {'legend': {'bgcolor': '#F5F6F9', 'font': {'color': '#4D5663'}},
               'paper_bgcolor': '#F5F6F9',
               'plot_bgcolor': '#F5F6F9',
               'title': {'font': {'color': '#4D5663'}},
               'xaxis': {'gridcolor': '#E1E5ED',
                         'showgrid': True,
                         'tickfont': {'color': '#4D5663'},
                         'title': {'font': {'color': '#4D5663'}, 'text': ''},
                         'zerolinecolor': '#E1E5ED'},
               'yaxis': {'gridcolor': '#E1E5ED',
                         'showgrid': True,
                         'tickfont': {'color': '#4D5663'},
                         'title': {'font': {'color': '#4D5663'}, 'text': ''},
                         'zerolinecolor': '#E1E5ED'}}
})

You'll note that each trace in the data has a fillcolor attribute: 'fillcolor': 'rgba(255, 153, 51, 0.3)'. The last number is the alpha value, which you want to modify. I've made a hacky little function to update the fillcolor attribute of all traces in a figure object:

def update_opacity(figure,opacity):
    for trace in range(len(figure['data'])):
        # print(figure['data'][trace]['fillcolor'],'-> ',end='')
        rgba_split = figure['data'][trace]['fillcolor'].split(',')
        figure['data'][trace]['fillcolor'] = ','.join(rgba_split[:-1] + [' {})'.format(opacity)])
        # print(figure['data'][trace]['fillcolor'])
    return figure

For full opacity, you can do:

figure = update_opacity(figure,1)

Then, simply plot the result with

py.iplot(figure)

Output:

plotly output with full opacity

like image 67
glhr Avatar answered Feb 04 '26 03:02

glhr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!