Использование раскрывающегося виджета Plotly с гистограммой - PullRequest
0 голосов
/ 18 сентября 2018

Я пытался применить выпадающий виджет на созданной мной гистограмме, но у меня возникли проблемы с применением фильтра. Я использовал это руководство по документации:

https://plot.ly/python/dropdown-widget/

Теперь у меня есть настройка набора данных, подобная этой:

id    happiness_score   time_of_day   
01             3                    08
02             4                    16
03             1                    22
04             2                    03
05             5                    16

Я пытаюсь создать гистограмму с оценкой в ​​качестве оси X и подсчетом Id в качестве оси Y и времени дня в качестве раскрывающегося виджета.

Пока я смог создать виджет, что заняло немного времени, но вот как я его получил:

#make a copy of the original df
df2 = df1


#converting the score to an object
df1['survey_time'] = 1['surveyed_at']= pd.to_datetime(dfnoadmin['surveyed_at'])
df1['survey_time'] = df1.survey_time.map(lambda x: x.strftime('%H'))
df1['score'] = df1['score'].apply(str)
df1.dtypes

#for the widget

dfq = df1
# we will define a function that will handle the input from the dropdown widget
def update_plot(dfz):
    noadmin = dfq['score'] ==  dfz['new']
    temp = dfq[noadmin]
    data = temp.groupby(dfq['score'])['time_of_day'].count()

    x = []
    y = []
    for i in range(len(data)):
        x.append(data.index[i])
        y.append(data[i])

    graph.restyle({
                'x': [x],
                'y': [y],
            })
    graph.relayout({'title': 'blah of {} blah'.format(dfz['new'])})

w = widgets.Dropdown(
    options= list(dfq['score'].unique()),
    value='0',
    description='score',
)

#now for graphing`
#turn the score back to an int for organizational purposes    


df2['score'] = df2['score'].apply(int)
fq = df2
fq = fq.groupby(['survey_time']).agg({'id': 'count'})


x= fq['id'].nlargest(400)
data1 = [Bar(
            y=x,
            x=x.keys(),
            text=x,
            textposition = 'outside',
            marker = dict(
            color = 'rgba(158,202,225)',
                line=dict(
                    color='rgb(8,48,107)',
                    width=1.5),
            ),
            name = "Total Users",
            opacity=0.6
    )]

layout1 = go.Layout(
    title="Time of Day",
    xaxis=dict(
        title='Surveys Completed by the hour',
        titlefont=dict(
            family='Courier New, monospace',
            size=18,
            color='#7f7f7f'
        )
    ),
    yaxis=dict(
        title='Time of Day',
        titlefont=dict(
            family='Courier New, monospace',
            size=18,
            color='#7f7f7f'
        )
    )
)

#Execute

display(w)

myFigure2 = go.Figure(data = data1 , layout = layout1)
iplot(myFigure2)

Однако все, что он делает - игнорирует фильтр и отображает все идентификаторы в течение дня, независимо от оценки. Если я сгруппирую фрейм данных fq по времени опроса И счету, а затем посчитай идентификаторы, то ничего не появится.

Как я могу применить выпадающие фильтры к графику, который я сделал?

1 Ответ

0 голосов
/ 18 сентября 2018

Команда разработчиков в Plotly вернулась ко мне.

вот что они сказали

Мы все еще работаем, чтобы очистить старую документацию, но подход GraphWidget в этомстраница не является рекомендуемым подходом на данный момент.Подход к FigureWidget в plotly.py версии 3 гораздо более эффективен и надежен.

Я думаю, что пример на этой странице будет хорошим началом для вас с использованием FigureWidget: https://plot.ly/python/figurewidget-app/ 2

Надеюсь, что это поможет вам,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...