Увеличение непрозрачности участка в сюжете - PullRequest
2 голосов
/ 01 мая 2019

Как мне увеличить opacity или alpha заполненной области моего графика? Я попробовал:

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)

но, похоже, не работает.

1 Ответ

1 голос
/ 01 мая 2019

Кажется, нет простого способа добиться этого. Однако обходной путь - сначала получить объект рисунка на графике, изменить его, чтобы изменить непрозрачность, а затем построить его.

Вы можете получить объект рисунка, используя атрибут asFigure, например:

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

Объект рисунка в этом случае выглядит так:

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

Вы заметите, что каждая трасса в данных имеет атрибут fillcolor: 'fillcolor': 'rgba(255, 153, 51, 0.3)'. Последнее число - это альфа-значение, которое вы хотите изменить. Я сделал маленькую хакерскую функцию для обновления атрибута fillcolor всех трасс в объекте фигуры:

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

Для полной непрозрачности вы можете сделать:

figure = update_opacity(figure,1)

Затем просто нанесите результат с помощью

py.iplot(figure)

Выход:

plotly output with full opacity

...