我正在阅读一些教程,包括官方文档,似乎每个人都更Output喜欢figure.
例如:
@app.callback(
Output('graph-with-slider', 'figure'),
Input('year-slider', 'value'))
def update_figure(selected_year):
filtered_df = df[df.year == selected_year]
fig = px.scatter(filtered_df, x="gdpPercap", y="lifeExp",
size="pop", color="continent", hover_name="country",
log_x=True, size_max=55)
fig.update_layout(transition_duration=500)
return fig
Run Code Online (Sandbox Code Playgroud)
为什么不只将数据输出到data图形字段呢?
是否可以?
我有一个用 Dash 框架编写的仪表板应用程序。它还具有一些使用 Flask 编写的 Restful API。我正在将 Flask 应用程序添加到 Dash 服务器,如下所示
import dash
import flask
import dash_bootstrap_components as dbc
flask_server = flask.Flask(__name__)
app = dash.Dash(__name__,server=flask_server, external_stylesheets=[dbc.themes.BOOTSTRAP])
Run Code Online (Sandbox Code Playgroud)
并且正在运行服务器
from dashboard import app
from waitress import serve
if __name__ == "__main__":
app.title = 'Litmus'
app.run_server(debug=False)
# serve(app,host="0.0.0.0",port=8050)
Run Code Online (Sandbox Code Playgroud)
上面的代码在我使用时工作正常app.run_server(debug=False),但当我使用 waitress 运行服务器时它会抛出异常。当我使用以下几行时
#app.run_server(debug=False)
serve(app,host="0.0.0.0",port=8050)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
ERROR:waitress:Exception while serving /
Traceback (most recent call last):
File "C:\Users\litmus\AppData\Roaming\Python\Python38\site-packages\waitress\channel.py", line 397, in service
task.service()
File "C:\Users\litmus\AppData\Roaming\Python\Python38\site-packages\waitress\task.py", line 168, in service
self.execute()
File "C:\Users\litmus\AppData\Roaming\Python\Python38\site-packages\waitress\task.py", line 434, …Run Code Online (Sandbox Code Playgroud) 我试图在我的仪表卡上添加千位分隔符,但我所有的努力都是徒劳的。发现这个解决方案更准确,但它给了我一个错误
类型错误:传递给系列的格式字符串不受支持。格式
@app.callback(
[Output('sls', 'children'),
Output('wngs', 'children'),
Output('rvne', 'children')],
Input('year', 'value')
)
def card_update(select_year):
dff=df_good.copy()
df_formattedd=dff.groupby(['year'], as_index=False)[['Net Sale', 'Winnings','Revenue']].sum()
df_formattedd[['Net Sale','Winnings','Revenue']]=df_formattedd[['Net Sale','Winnings','Revenue']].apply(lambda x:round(x,2))
df_formattedd[['Net Sale','Winnings','Revenue']]= df_formattedd[['Net Sale','Winnings','Revenue']].apply(lambda x: f'{x:,}')
sales=df_formattedd[df_formattedd['year']==select_year]['Net Sale']
winnings=df_formattedd[df_formattedd['year']==select_year]['Winnings']
revenue=df_formattedd[df_formattedd['year']==select_year]['Revenue']
return sales, winnings, revenue
Run Code Online (Sandbox Code Playgroud) 我尝试将本地 html 文件嵌入到基本的 Dash 应用程序中。我使用了此链接中的代码,并将路径替换为我的本地相对路径(破折号应用程序与 html 本地页面位于同一文件夹中)
html.Iframe(src="random_example.html",
style={"height": "1067px", "width": "100%"})
Run Code Online (Sandbox Code Playgroud)
import datetime
import sqlite3
import webbrowser
from time import sleep
import dash
import dash_html_components as html
import dash_core_components as dcc
from flask import Response
app = dash.Dash()
server = app.server
app.layout = html.Div([html.H1('Graphs will be added here'),
html.P('click on LOG_VIEW to view logger'),
dcc.Link(
html.Button('LOG_VIEW'),
href='/log_stream')])
latest_sno = 0
def flask_logger():
"""creates logging information"""
global latest_sno, data
values = ''
connection = sqlite3.connect(r'C:\Users\rohit\Desktop\newbase.db')
s = ''
while True:
try:
data = connection.cursor()
pt = data.execute(f"Select * FROM cvt WHERE SNO …Run Code Online (Sandbox Code Playgroud) 我\xe2\x80\x99一直在开发一个使用 的 dash 应用程序long_callback,并且为了开发,我\xe2\x80\x99一直在diskcache为我的 使用后端long_callback_manager,正如我在这里找到的指南所建议的:https://dash.plotly。 com/长回调
当我尝试使用 Gunicorn 运行我的应用程序时,它无法启动,因为diskcache. 因此,我决定切换到 celery/redis 后端,因为 \xe2\x80\x99s 无论如何都建议用于生产。
我运行了一个 redis 服务器(正确响应 with redis-cli ping)PONG,然后再次启动该应用程序。这次它启动得很好,所有正常的回调都起作用,但不起作用long_callback。
细节:
\nUpdating...,表明应用程序认为\xe2\x80\x99s\xe2\x80\x9c正在等待\xe2\x80\x9d的响应/更新这long_callback。long_callback被设置为它们的起始值,表明应用程序识别出long_callback应该运行。long_callback并看到它没有打印,我确定该函数永远不会启动。这些细节都表明问题出在 celery/redis 后端。无论是在客户端/浏览器上还是在服务器\xe2\x80\x99s stdout/sterr 上都没有显示错误。
\n如何让 celery/redis 后端工作?
\n更新:在意识到该变量正在被使用并且其值根据引用它的文件而变化之后,我还尝试将创建和 的__name__代码移至,但无济于事。完全相同的事情发生了。celery_appLONG_CALLBACK_MANAGERapp.py …
我对 python/dash/plotly 很陌生,并且不断收到相同的错误:
ImportError:无法从部分初始化的模块“dash”导入名称“dcc”(很可能是由于循环导入)
有谁知道如何解决这一问题?我导入了以下内容:
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
import plotly.io as pio
Run Code Online (Sandbox Code Playgroud) 我想使用 Python Dash 应用程序构建 Docker 容器。该应用程序需要地理空间包,例如 Geopandas、Folium、Shapely。当尝试构建 Docker 镜像时,尝试安装 Fiona 时失败,它说它需要 GDAL。我不确切知道如何将 gdal 包安装到基础映像中。
Dockerfile
FROM python:3.8-slim
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install -r requirements.txt && rm -rf /root/.cache
COPY ./ /code/
CMD ["gunicorn","-b","0.0.0.0:8080","index:server"]
Run Code Online (Sandbox Code Playgroud)
要求.txt
attrs==21.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
branca==0.4.2; python_version >= "3.5"
brotli==1.0.9; python_version >= "3.6"
certifi==2021.10.8; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.8"
charset-normalizer==2.0.10; python_full_version >= …Run Code Online (Sandbox Code Playgroud) 语境 :
我有一个带有下拉菜单和地图的 Dash 应用程序。
该地图显示 3 个 ID 为“01”、“02”和“03”的标记。我可以点击一个标记并通过回调返回其 ID。
下拉列表使我能够通过 ID 选择标记。
我想要做的是使用地图上选定的标记更新下拉列表中的选定值。
示例:我想选择“02”。我可以通过在下拉列表中选择“02”或单击地图上的“02”来完成此操作。但如果我从地图中选择它,我希望从下拉列表中选择的值更新为“02”。
如何根据回调返回的值更新下拉列表选定的值?
这是一个代表:
# -*- coding: utf-8 -*-
import dash.dependencies
import dash_bootstrap_components as dbc
import pandas as pd
import dash_leaflet as dl
from dash import dcc, html, Input, Output
########################################################################################################################
# VARIABLES
df_sites = pd.DataFrame([['01', (48.805, 2.326)], ['02', (43.167, 0.969)], ['03', (48.812, 2.530)]],
columns=['id_tech', 'coordonnees'])
circlemarkers = [dl.CircleMarker(
dl.Tooltip(df_sites.iloc[i]['id_tech']),
center=pos,
radius=2,
id=df_sites.iloc[i]['id_tech'])
for i, pos in enumerate(df_sites['coordonnees'])]
########################################################################################################################
# APP
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
app.layout …Run Code Online (Sandbox Code Playgroud) 我有下面的书面代码。我有两个基于chained callbacks. 第一个下拉菜单获取数据集并读取列的名称并更新第二个下拉菜单中的选项。然后,可以将参数绘制在图表上。我的数据框看起来像这样:
df={'col1':[12,15,25,33,26,33,39,17,28,25],
'col2':[35,33,37,36,36,26,31,21,15,29],
'col3':['A','A','A','A','B','B','B','B','B','B'],
'col4':[1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
我想根据 中的类别突出显示图表背景col3。我不明白为什么当我从第一个下拉菜单中选择数据集时,图表上会出现 col3 的背景颜色(在选择参数之前)。我已经使用了Prevent_initial_call = True,但是第二个回调仍然会触发。
import dash
from dash import Dash, html, dcc, Output, Input, State, MATCH, ALL
import plotly.express as px
import pandas as pd
import numpy as np
import dash_bootstrap_components as dbc
app = Dash(__name__)
app.layout = html.Div([
html.Div(children=[
html.Button('add Chart', id='add-chart', n_clicks=0)
]),
html.Div(id='container', children=[])
])
@app.callback(
Output('container', 'children'),
[Input('add-chart', 'n_clicks'),
Input({'type': 'remove-btn', 'index': ALL}, 'n_clicks')],
[State('container', 'children')],
prevent_initial_call=True
)
def display_graphs(n_clicks, n, …Run Code Online (Sandbox Code Playgroud) plotly-dash ×10
python ×10
plotly ×2
callback ×1
celery ×1
css ×1
dash-leaflet ×1
dashboard ×1
docker ×1
fiona ×1
flask ×1
geopandas ×1
html ×1
importerror ×1
leaflet ×1
pandas ×1
path ×1
python-3.x ×1
redis ×1
waitress ×1