【问题标题】:using dash in python to upload files and plot a bar chart在 python 中使用破折号上传文件并绘制条形图
【发布时间】:2018-09-10 07:08:20
【问题描述】:

我尝试使用来自 plotly 的dash 制作交互式仪表板。我是它的初学者,因此我使用了example 来做到这一点。 代码应该从某个文件夹上传不同的数据文件,并根据某个列绘制直方图。每个文件的名称类似于"30092017ARB.csv" (date + ARB.csv)。代码循环遍历数据文件夹中的所有文件名,并在下拉底部打印文件名。选择文件名后,应将其上传并绘制直方图。我写了以下代码:

        import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd
#
from os import listdir
from os.path import isfile, join
import numpy as np
#

mypath='/Users/Python/BeN_/data/'
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]



app = dash.Dash()

app.layout = html.Div([
    html.H2("Ausfallsreport"),
    html.Div(
        [
            dcc.Dropdown(
                id="dataFH",
                options=[{
                    'label': i,
                    'value': i
                } for i in onlyfiles],
                value=" "),
        ],
        style={'width': '25%',
               'display': 'inline-block'}),
    dcc.Graph(id='Mygraph'),
])
@app.callback(
dash.dependencies.Output('Mygraph', 'figure'),
[dash.dependencies.Input('dataFH', 'value')])
def update_graph(dataFH):
    df = pd.read_csv(mypath+dataFH, delimiter=';',encoding='cp1252') 
    # aggregate 
    dfagg = df.groupby('Bestand', as_index=False).agg({'MW': 'sum'})
    # make strings for x-axis 
    x=["BE-"+s for s in[str(s) for s in [int(x) for x in dfagg.iloc[:,0].tolist()]]]
    y=dfagg.ix[:,1].tolist()

    trace = go.Bar(x=x, y=y, name='Declined')

    return {
        'data': [trace],
        'layout':
        go.Layout(
            title='Customer Order Status for {}'.format(dataFH),
            barmode='bar',
            yaxis=dict(tickformat=".2%"))
    }


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

我在 http://127.0.0.1:8050/ 下得到以下 。 问题是我没有得到任何条形图。有人可以帮我找出原因。

【问题讨论】:

  • 去掉下拉属性value = ' '并用placeholder = "select a file"替换它。属性value 引用下拉列表中的一个值,该值应该存在于下拉列表的选项中。如果您不想进行任何初始选择,请将value 替换为属性placeholder,这可能是一个指令或一个虚假的选择,如果您愿意,则会给出一个提示,并在下拉字段中显示为灰色。

标签: python dashboard plotly-dash


【解决方案1】:

如果您还没有弄清楚,问题是当用户最初连接时,它会触发您的回调。并且您将下拉菜单的初始值设置为

dataFH=" "

导致

df = pd.read_csv(mypath+dataFH ... 

因为该文件不存在而引发错误。

解决此问题的不同方法,但一种方法是检查 mypath+dataFH 是否是回调中的文件,如果不是文件,则返回一个空的跟踪列表:

def update_graph(dataFH):
    if isfile(mypath+dataFH):
        df = pd.read_csv(mypath+dataFH, delimiter=';',encoding='cp1252') 
        # aggregate 
        dfagg = df.groupby('Bestand', as_index=False).agg({'MW': 'sum'})
        # make strings for x-axis 
        x=["BE-"+s for s in[str(s) for s in [int(x) for x in dfagg.iloc[:,0].tolist()]]]
        y=dfagg.ix[:,1].tolist()

        trace = go.Bar(x=x, y=y, name='Declined')
    else: 
        trace=[]

    return {
        'data': [trace],
        'layout':
        go.Layout(
            title='Customer Order Status for {}'.format(dataFH),
            barmode='bar',
            yaxis=dict(tickformat=".2%"))
    }

【讨论】:

  • 谢谢克里斯,我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多