gpt4 book ai didi

python - 使用破折号上传组件上传csv文件并生成图表

转载 作者:行者123 更新时间:2023-12-04 14:16:01 25 4
gpt4 key购买 nike

我想上传一个 csv 文件并生成一个从 csv 文件输出数据的图表,我可以上传 csv 并使用 dash_table 显示数据,但我无法让图表工作。
上传 csv 文件后出现错误:参数无效 figure.data传递到 ID 为“Mygraph”的 Graph。
期望一个数组。
供应类型 object .

import base64
import datetime
import io
import plotly.graph_objs as go
import cufflinks as cf

import dash
from dash.dependencies import Input, Output, State
import dash_core_components as dcc
import dash_html_components as html
import dash_table

import pandas as pd

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

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

colors = {"graphBackground": "#F5F5F5", "background": "#ffffff", "text": "#000000"}

app.layout = html.Div(
[
dcc.Upload(
id="upload-data",
children=html.Div(["Drag and Drop or ", html.A("Select Files")]),
style={
"width": "100%",
"height": "60px",
"lineHeight": "60px",
"borderWidth": "1px",
"borderStyle": "dashed",
"borderRadius": "5px",
"textAlign": "center",
"margin": "10px",
},
# Allow multiple files to be uploaded
multiple=True,
),
dcc.Graph(id="Mygraph"),
html.Div(id="output-data-upload"),
]
)


@app.callback(
Output("Mygraph", "figure"),
[Input("upload-data", "contents"), Input("upload-data", "filename")],
)
def update_graph(contents, filename):
fig = {
"layout": go.Layout(
plot_bgcolor=colors["graphBackground"],
paper_bgcolor=colors["graphBackground"],
)
}

if contents:
contents = contents[0]
filename = filename[0]
df = parse_data(contents, filename)
df = df.set_index(df.columns[0])
fig["data"] = df.iplot(
asFigure=True, kind="scatter", mode="lines+markers", size=1
)

return fig


def parse_data(contents, filename):
content_type, content_string = contents.split(",")

decoded = base64.b64decode(content_string)
try:
if "csv" in filename:
# Assume that the user uploaded a CSV or TXT file
df = pd.read_csv(io.StringIO(decoded.decode("utf-8")))
elif "xls" in filename:
# Assume that the user uploaded an excel file
df = pd.read_excel(io.BytesIO(decoded))
elif "txt" or "tsv" in filename:
# Assume that the user upl, delimiter = r'\s+'oaded an excel file
df = pd.read_csv(io.StringIO(decoded.decode("utf-8")), delimiter=r"\s+")
except Exception as e:
print(e)
return html.Div(["There was an error processing this file."])

return df


@app.callback(
Output("output-data-upload", "children"),
[Input("upload-data", "contents"), Input("upload-data", "filename")],
)


def update_table(contents, filename):
table = html.Div()

if contents:
contents = contents[0]
filename = filename[0]
df = parse_data(contents, filename)

table = html.Div(
[
html.H5(filename),
dash_table.DataTable(
data=df.to_dict("rows"),
columns=[{"name": i, "id": i} for i in df.columns],
),
html.Hr(),
html.Div("Raw Content"),
html.Pre(
contents[0:200] + "...",
style={"whiteSpace": "pre-wrap", "wordBreak": "break-all"},
),
]
)

return table


if __name__ == "__main__":
app.run_server(debug=True)
错误:
screenshot of error

最佳答案

您需要创建一个 go.Figure对象并返回它,例如:

@app.callback(Output('Mygraph', 'figure'), [
Input('upload-data', 'contents'),
Input('upload-data', 'filename')
])
def update_graph(contents, filename):
x = []
y = []
if contents:
contents = contents[0]
filename = filename[0]
df = parse_data(contents, filename)
df = df.set_index(df.columns[0])
x=df['DATE']
y=df['TMAX']
fig = go.Figure(
data=[
go.Scatter(
x=x,
y=y,
mode='lines+markers')
],
layout=go.Layout(
plot_bgcolor=colors["graphBackground"],
paper_bgcolor=colors["graphBackground"]
))
return fig

取决于您想要什么样的图形(例如 go.Scatter )和要显示的值的类型( xy 值)。
要向图中添加更多线,您可以添加更多 go.Scatter反对 data具有不同值的数组。

enter image description here

关于python - 使用破折号上传组件上传csv文件并生成图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60223161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com