首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于添加了简单的代码行,Plotly-Dash Chart失败

由于添加了简单的代码行,Plotly-Dash Chart失败
EN

Stack Overflow用户
提问于 2020-09-11 21:12:19
回答 1查看 42关注 0票数 0

下面的脚本一直有效,直到我更改了这一点:

代码语言:javascript
复制
if selected_class=='USD':
    tick_format=None
else:
    tick_format='%'

要这样做:

代码语言:javascript
复制
if selected_class=='USD':
    tick_format=None
else:
    if max(abs(df4['value'])) < 0.1:
        tick_format='.2%'
    else:
        tick_format='%'

下面是更改后的当前脚本。我不明白为什么它不能工作。

我得到一个回调错误。这跟max(abs(df4['value'])) < 0.1这行有关系。

我以前尝试过max(abs(df4.value)) < 0.1,但返回了一个错误:dataframe has no attribute 'value'

代码语言:javascript
复制
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import numpy as np

import pandas as pd

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

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

path = 'https://raw.githubusercontent.com/tbuckworth/Public/master/CSVTest.csv'
df = pd.read_csv(path)
df2 = df[(df.Map==df.Map)]


def layout_function():

    global df
    df = pd.read_csv(path)
    global df2
    df2 = df[(df.Map==df.Map)]
    
    available_strats = np.append('ALL',pd.unique(df2.Map.sort_values()))
    classes1 = pd.unique(df2["class"].sort_values())
    metrics1 = pd.unique(df2.metric.sort_values())
    
    return html.Div([
            html.Div([
                dcc.Dropdown(
                    id="Strategy",
                    options=[{"label":i,"value":i} for i in available_strats],
                    value=list(available_strats[0:1]),
                    multi=True
                ),
                dcc.Dropdown(
                    id="Class1",
                    options=[{"label":i,"value":i} for i in classes1],
                    value=classes1[0]
                ),
                dcc.Dropdown(
                    id="Metric",
                    options=[{"label":i,"value":i} for i in metrics1],
                    value=metrics1[0]
                )],
            style={"width":"20%","display":"block"}),
                
        html.Hr(),
    
        dcc.Graph(id='Risk-Report')          
    ])
            
app.layout = layout_function

@app.callback(
        Output("Risk-Report","figure"),
        [Input("Strategy","value"),
         Input("Class1","value"),
         Input("Metric","value"),
         ])

def update_graph(selected_strat,selected_class,selected_metric):
    if 'ALL' in selected_strat:
        df3 = df2[(df2["class"]==selected_class)&(df2.metric==selected_metric)]
    else:
        df3 = df2[(df2.Map.isin(selected_strat))&(df2["class"]==selected_class)&(df2.metric==selected_metric)]
    df4 = df3.pivot_table(index=["Fund","Date","metric","class"],values="value",aggfunc="sum").reset_index()
    traces = []
    for i in df4.Fund.unique():
        df_by_fund = df4[df4["Fund"] == i]
        traces.append(dict(
                x=df_by_fund["Date"],
                y=df_by_fund["value"],
                mode="lines",
                name=i
                ))
    
    if selected_class=='USD':
        tick_format=None
    else:
        if max(abs(df4['value'])) < 0.1:
            tick_format='.2%'
        else:
            tick_format='%'
    
    return {
            'data': traces,
            'layout': dict(
                xaxis={'type': 'date', 'title': 'Date'},
                yaxis={'title': 'Values','tickformat':tick_format},
                margin={'l': 40, 'b': 40, 't': 10, 'r': 10},
                legend={'x': 0, 'y': 1},
                hovermode='closest'
            )
        }
    

if __name__ == '__main__':
    app.run_server(debug=True)
EN

回答 1

Stack Overflow用户

发布于 2020-10-05 16:28:49

如果选择了某些下拉列表,使得df4没有行(因为没有为该下拉列表的组合选择任何值),则行if max(abs(df4['value'])) < 0.1:会产生错误。

我已经将这段代码调整为以下代码,以便在运行上述测试之前测试df4是否有一些行:

代码语言:javascript
复制
if selected_class=='USD':
        tick_format=None
    else: 
        if len(df4.index) != 0:
            if max(abs(df4["value"])) < 0.1:
                tick_format='.2%'
            else:
                tick_format='%'
        else:
            tick_format=None

现在,无论选择哪种下拉菜单组合,它都可以正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63847795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档