代码之家  ›  专栏  ›  技术社区  ›  RSW

为plotly python图形选择按钮时,条形图未更新

  •  0
  • RSW  · 技术社区  · 10 月前

    下面的plotly代码渲染条形图,带有选择按钮 stack group 风格。但当在按钮上进行选择时,图表不会更新样式。我该如何解决这个问题:

    fig1 = go.Figure()
    
    x  = temp_df.index
    y1 = temp_df['Sales'].astype(float) # Sales Column
    y2 = temp_df['Expenses'].astype(float) # Expenses Column
    y3 = temp_df['Operating Profit'].astype(float) # Expenses Column
    y4 = temp_df['Net Profit'].astype(float) # Expenses Column
    
    fig1.add_trace(go.Bar(x=x, y=y1, name='Sales', marker_color ="#4287f5"))
    fig1.add_trace(go.Bar(x=x, y=y2, name='Expenses', marker_color ="#f06969"))
    fig1.add_trace(go.Bar(x=x, y=y3, name='Operating Profit', marker_color ="#469984"))
    fig1.add_trace(go.Bar(x=x, y=y4, name='Net Profit', marker_color ="#53c24f"))
    
    fig1.update_layout(
            title='<b>QoQ Performance</b>',
            xaxis_title='Quarter',
            yaxis_title='Rupees in Cr.')
    
    updatemenus=[
            dict(
                type = "buttons",
                buttons=list([
                    dict(
                        args=['barmode', 'Group'],
                        label="Group",
                        method="update",
                    ),
                    dict(
                        args=["barmode", "stack"],
                        label="Stack",
                        method="update"
                    )
                ]) 
            ),
        ]
    
    fig1.update_layout(updatemenus=updatemenus)
    fig1.show()
    
    

    enter image description here

    参考数据帧。指数是 Quarter .

    一刻钟 销售额 费用 营业利润 净利润
    q1 674.3 529.47 144.83 48.81
    q2 634.32 498.08 136.24 45.91
    q3 338.17 265.54 72.63 24.48
    q4 1209.9 949.99 259.86 87.57
    1 回复  |  直到 10 月前
        1
  •  1
  •   Lisan Al Gaib    10 月前

    如果你想快速解决问题,那就改变吧 method="update" method="relayout" .

    此外,请在下面找到代码的优化版本,

    import plotly.graph_objects as go
    
    fig1 = go.Figure()
    
    
    data = {
        'Quarter': ['q1', 'q2', 'q3', 'q4'],
        'Sales': [674.3, 634.32, 338.17, 1209.9],
        'Expenses': [529.47, 498.08, 265.54, 949.99],
        'Operating Profit': [144.83, 136.24, 72.63, 259.86],
        'Net Profit': [48.81, 45.91, 24.48, 87.57]
    }
    temp_df = pd.DataFrame(data)
    
    x = temp_df.index
    y1 = temp_df['Sales'].astype(float)
    y2 = temp_df['Expenses'].astype(float)
    y3 = temp_df['Operating Profit'].astype(float)
    y4 = temp_df['Net Profit'].astype(float)
    
    fig1.add_trace(go.Bar(x=x, y=y1, name='Sales', marker_color="#4287f5"))
    fig1.add_trace(go.Bar(x=x, y=y2, name='Expenses', marker_color="#f06969"))
    fig1.add_trace(go.Bar(x=x, y=y3, name='Operating Profit', marker_color="#469984"))
    fig1.add_trace(go.Bar(x=x, y=y4, name='Net Profit', marker_color="#53c24f"))
    
    fig1.update_layout(
        title='<b>QoQ Performance</b>',
        xaxis_title='Quarter',
        yaxis_title='Rupees in Cr.')
    
    updatemenus=[
        dict(
            type="buttons",
            buttons=list([
                dict(
                    label="Group",
                    method="relayout",
                    args=[{"barmode": "group"}]
                ),
                dict(
                    label="Stack",
                    method="relayout",
                    args=[{"barmode": "stack"}]
                )
            ])
        )
    ]
        
    fig1.update_layout(updatemenus=updatemenus)
    fig1.show()