Python 绘制虚线-如何设置两个条件来绘制直方图?

Python 绘制虚线-如何设置两个条件来绘制直方图?,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我正在寻找一种方法来绘制关于2下拉列表的数据直方图。为了绘制直方图,我必须选择firstcall的值和secondcall的值。我找不到很多关于这个问题的文献,我希望你们中的一位已经面对过这个问题 请查找包含一些数据和代码的excel文件,我尝试使用以下代码: import dash import dash_core_components as dcc import dash_html_components as html import plotly.graph_objs as go impor

我正在寻找一种方法来绘制关于2
下拉列表的数据直方图。为了绘制直方图,我必须选择
firstcall
的值和
secondcall
的值。我找不到很多关于这个问题的文献,我希望你们中的一位已经面对过这个问题

请查找包含一些数据和代码的excel文件,我尝试使用以下代码:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd

df = pd.read_excel(
    "/Users/appelexcel.xlsx"
)

mgr_options = df["premierappel"].unique()
mgr_options_second = df["secondappel"].unique()

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

colors = {
    'background': '#FDFFFF',
    'text': '#0A25DC'
}

app.layout = html.Div(style={'backgroundColor': colors['background']},children=[
    html.H1(children='Call',
     style={
            'textAlign': 'center',
            'color': colors['text']
        }
        ),

    html.Div(
        [
            dcc.Dropdown(
                id="premierappel",
                options=[{
                    'label': i,
                    'value': i
                } for i in mgr_options],
                value='All First Call'),
        ],
        style={'width': '25%',
               'display': 'inline-block'}),
    dcc.Graph(id='secondcallgraph'), 
 #The first plot just give the 2nd call

    html.Div(
        [
            dcc.Dropdown(
                id="secondappel",
                options=[{
                    'label': i,
                    'value': i
                } for i in mgr_options_second],
                value='All Second Call'),
        ],
        style={'width': '25%',
               'display': 'inline-block'}),
    dcc.Graph(id='thirdcallgraph'), # second figure
])


@app.callback(
    dash.dependencies.Output('secondcallgraph', 'figure'),
    [dash.dependencies.Input('premierappel', 'value')])
def update_graph(premierappel):
    if premierappel == "All First Call":
        df_plot = df.copy()
    else:
        df_plot = df[df['premierappel'] == premierappel]

    #func=(lambda x: round(100*x.count()/df_plot.shape[0] ,2))
    pv = pd.pivot_table(
        df_plot,
        index=['Age_1_2'],
        columns=['secondappel'],
        values=['frequency_1_2'],
        aggfunc=sum,
        fill_value=0)

    trace1 = go.Bar(x=pv.index, y=pv[('frequency_1_2', 'modification')], name='Modification')
    trace2 = go.Bar(x=pv.index, y=pv[('frequency_1_2', 'informations')], name='Informations')
    trace3 = go.Bar(x=pv.index, y=pv[('frequency_1_2', 'autres')], name='Autres')
    trace4 = go.Bar(x=pv.index, y=pv[('frequency_1_2', 'achat')], name='Achat')

    return {
        'data': [trace1, trace2, trace3, trace4],
        'layout':
        go.Layout(
            title='Appel 2 / {}'.format(premierappel),
            xaxis=dict(
                title='Days after 1st Call'),
            yaxis=dict(
                title='Count'),
            barmode='stack')
    }
第二个图形(第三次调用时) 我的问题出现在这里,我如何告诉他考虑两个条件(一个在第一次呼叫时,另一个在第二次呼叫时)

谢谢你的时间

年龄:通话间隔时间

频率:应该是频率,但它是随机的,只是看看它是如何工作的

请查找上面的数据。
我无法理解它的含义。但我可以从收到的错误消息中推断:

File "pandas\_libs\index.pyx", line 672, inpandas._libs.index.BaseMultiIndexCodesEngine.get_loc

KeyError: ('frequency_2_3', 'modification')
就这样

在第二次回调中,您将分配四个跟踪。但是变量(pandas.Series())
pv
将只保存一列(在调试过程中)

假设第二个回调作为过滤器工作:
如果。。。埃利夫。。。否则
block.

我无法理解它的含义。但我可以从收到的错误消息中推断:

File "pandas\_libs\index.pyx", line 672, inpandas._libs.index.BaseMultiIndexCodesEngine.get_loc

KeyError: ('frequency_2_3', 'modification')
就这样

在第二次回调中,您将分配四个跟踪。但是变量(pandas.Series())
pv
将只保存一列(在调试过程中)

假设第二个回调作为过滤器工作:
如果。。。埃利夫。。。elseblock.

好的,我明白了,不幸的是,第二个图形只有一个选择器,如何才能有两个选择器(
下拉列表
)?Alex,你提供了一个问题应该包含什么的好例子(代码和数据的最小可重复示例)。但我真的没有得到你想要的。我无法从代码或数据推断目标。我的问题发生了变化,我成功地应用了两个条件。我的新问题来自这样一个事实:当我在第一次调用的下拉列表中选择某个值时,有时与第二次调用的值没有对应。例如,在第一次调用中选择
Achat
,有时在第二次调用中没有
Achat
,等等。条形图不工作,也不显示任何内容…好的,我知道,不幸的是,第二个图中只有一个选择器,我如何才能有两个选择器(
下拉列表
)?Alex,您提供了一个很好的示例,说明问题应该包含哪些内容(代码和数据的最小可重复示例)。但我真的没有得到你想要的。我无法从代码或数据推断目标。我的问题发生了变化,我成功地应用了两个条件。我的新问题来自这样一个事实:当我在第一次调用的下拉列表中选择某个值时,有时与第二次调用的值没有对应。例如,在第一次调用时选择
Achat
,有时在第二次调用中没有
Achat
,因此go.Bar不起作用,也不显示任何内容。。。