Dash DataTable 组件在列标题下提供了一个自由文本过滤器。
如何用包含所有可供选择的唯一值的下拉过滤器替换此过滤器?
Excel 中现成的东西:
或者在DataTables JavaScript 组件中进行一些简单的修改
我知道我可以在通过回调与 DataTable 交互的 DataTable 之外使用下拉过滤器,但我希望下拉过滤器成为 DataTable 列标题的一部分。从这个意义上说,我不想使用以下解决方案:在破折号中从下拉列表中过滤行后显示数据表
有几个类似的问题我将在本文中引用,但我有一个DataTable带有列的破折号,我想将其制作为可单击的超链接。该表基本上如下所示:
Date Ticket ID Work Order Link (s)
2018-08-30 22:52:25 1444008 119846184 google.com/woNum=119846184
2021-09-29 13:33:49 1724734 122445397, 122441551 google.com/woNum=122445397, google.com/woNum=122441551
Run Code Online (Sandbox Code Playgroud)
如果没有超链接,我将通过 Pandas 数据框以及 Dash 的数据和列引用创建表,DataTable如下所示:
# works fine
searchFrame = searchFrame.drop(columns=['ContentNoStop'])
columns = [{'name': col, 'id': col} for col in searchFrame.columns]
Run Code Online (Sandbox Code Playgroud)
链接是通过以下方式创建的:
woLink = r'http://corp.com/uniqueid='
df['WO Link'] = df['Work Order'].str.replace('(\d+)', rf'{woLink}\1')
crLink = r'http://corp.com/uniqueid='
df['Ticket Link'] = crLink + df['Ticket ID'].astype(str)
Run Code Online (Sandbox Code Playgroud)
现在,根据Plotly 论坛的这个问题,我进行了编辑以适合我的:
columns = [
{'name': col, 'id': col}
for col in searchFrame.loc[
:, …Run Code Online (Sandbox Code Playgroud) 当我运行此代码时,我收到一条错误消息,显示“错误:组件dash_bootstrap_components.Row(版本 1.0.2)收到意外的关键字参数:no_gutters
允许的参数:align、children、className、class_name、id、justify、key、loading_state、style”
我相信这是因为我使用的 dash bootstrap 版本。如何修改我的代码以使其正常工作?
app.layout = dbc.Container([
dbc.Row(
dbc.Col(html.H1("My Dashboard",
className='text-center'),
width=12)
),
dbc.Row([
dbc.Col([
dcc.Dropdown(id='my-dpdn', multi=False, value='A',
options=[{'label':x, 'value':x}
for x in sorted(df['Value'].unique())],
),
dcc.Graph(id='line-fig', figure={})
],# width={'size':5, 'offset':1, 'order':1},
xs=12, sm=12, md=12, lg=5, xl=5
),
dbc.Col([
dcc.Dropdown(id='my-dpdn2', multi=True, value=['B','C'],
options=[{'label':x, 'value':x}
for x in sorted(df['Value'].unique())],
),
dcc.Graph(id='line-fig2', figure={})
], #width={'size':5, 'offset':0, 'order':2},
xs=12, sm=12, md=12, lg=5, xl=5
),
], no_gutters=True, justify='start')
], fluid=True)
Run Code Online (Sandbox Code Playgroud) 我正在开发一个破折号应用程序,我尝试在其中集成ExplainerDashboard。
如果我这样做:
app.config.external_stylesheets = [dbc.themes.BOOTSTRAP]
app.layout = html.Div([
html.Button('Submit', id='submit', n_clicks=0),
html.Div(id='container-button-basic', children='')
])
X_train, y_train, X_test, y_test = titanic_survive()
model = LogisticRegression().fit(X_train, y_train)
explainer = ClassifierExplainer(model, X_test, y_test)
db = ExplainerDashboard(explainer, shap_interaction=False)
db.explainer_layout.register_callbacks(app)
@app.callback(
Output('container-button-basic', 'children'),
Input('submit', 'n_clicks'),
)
def update_output(n_clicks):
if n_clicks == 1:
return db.explainer_layout.layout()
Run Code Online (Sandbox Code Playgroud)
单击按钮时会触发仪表板,但是,它是在我单击按钮之前以及破折号开始时计算的。如果我更改它并将计算放入这样的回调中,我会得到仪表板,但看起来注册回调不起作用并且所有绘图都是空的
app.config.external_stylesheets = [dbc.themes.BOOTSTRAP]
app.layout = html.Div([
html.Button('Submit', id='submit', n_clicks=0),
html.Div(id='container-button-basic', children='')
])
X_train, y_train, X_test, y_test = titanic_survive()
model = LogisticRegression().fit(X_train, y_train)
explainer = ClassifierExplainer(model, X_test, y_test)
@app.callback(
Output('container-button-basic', …Run Code Online (Sandbox Code Playgroud) 我正在尝试部署我的dash应用程序,该应用程序使用dash_extensions、Dash_proxy,并且在使用gunicorn运行的GCP云上的页面文件夹中具有多个页面,但该应用程序找不到页面文件夹。当我使用开发服务器时它工作得很好,但在生产服务器中由于找不到文件夹路径而中断。
该应用程序(以下代码位于app.py文件内):
app = DashProxy(use_pages=True, pages_folder=pages_folder, external_stylesheets=[dbc.themes.SIMPLEX])
Run Code Online (Sandbox Code Playgroud)
文件app.py和pages文件夹在同一目录下
我尝试过以下方法来获取文件夹路径:
pages_folder="pages"
Run Code Online (Sandbox Code Playgroud)
pages_folder=os.path.join(os.path.dirname(__file__), "pages")
Run Code Online (Sandbox Code Playgroud)
for p in Path('.').rglob('*'):
if str(p).endswith('pages'):
pages_folder = str(p)
break
Run Code Online (Sandbox Code Playgroud)
当通过 docker 使用gunicorn 在 gcp 上部署时,以上三个都不起作用:
Dockerfile 命令:
CMD ["gunicorn" , "-b", "0.0.0.0:8000", "app:server"]
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过 docker 使用开发服务器,如下代码所示,它可以工作:
CMD python app.py
Run Code Online (Sandbox Code Playgroud)
有谁知道如何让它与gunicorn 一起工作吗?
谢谢您的帮助!
-雷克森
以下代码用于使用滑块更改 Plotly 热图色标的 \xe2\x80\x9cmin\xe2\x80\x9d 。
\n但它非常慢:拖动滑块时我们的移动速度为 1 fps。
\n像用“heatmapgl”替换“heatmap”这样的解决方案并不能真正解决问题(它可能会提高到 2 fps)。
\n如何使用滑块更灵敏/更快地更改色阶?
\n对于许多应用程序来说,能够“实时”(超过 10 fps)看到色标变化的结果至关重要,并且可以使用 Matplotlib 等来做到这一点。
\n如何在 Plotly JS 中获得相同的行为?
\nvar z = Array.from({length: 500}, () => Array.from({length: 1000}, () => Math.floor(Math.random() * 500))); \nvar steps = [], i;\nfor (i = 0; i < 500; i++)\n steps.push({label: i, method: \'restyle\', args: [\'zmin\', i]});\nPlotly.newPlot(\'myDiv\', [{z: z, colorscale: \'Jet\', type: \'heatmap\'}], {sliders: [{steps: steps}]});Run Code Online (Sandbox Code Playgroud)\r\n<script src="https://cdn.plot.ly/plotly-2.16.2.min.js"></script>\n<div id="myDiv"></div>Run Code Online (Sandbox Code Playgroud)\r\n我正在尝试实现一个多页面 Dash Web 应用程序,但在跨页面来回切换时,我很难“存储”组件中的更改。也就是说,每次移动到新页面时,布局都会刷新。
下面有一个(最小?)用于重现性目的的代码示例,其中第 1 页有一个 html 表格,第一行允许用户输入和添加按钮,然后也可以删除插入的行。第2页只是一个用于来回切换的占位符。
我想一种策略可能是使用不同的dcc.Stores 并记录发生的情况,并在切换时从中填充页面。但我希望有更好的策略:)
索引.py
import dash
from dash import html, dcc
import dash_bootstrap_components as dbc
# Dash app
app = dash.Dash(
__name__,
external_stylesheets=[
dbc.themes.FLATLY,
dbc.icons.BOOTSTRAP,
],
use_pages=True,
)
sidebar = dbc.Col(
id="sidebar",
children=[
dbc.Nav(
id="sidebar-nav",
children=[
dbc.NavLink(children="page1", id="page1", href="/page1", active="exact"),
dbc.NavLink(children="page2", id="page2", href="/page2", active="exact")
],
),
],
)
main_content = dbc.Col(
id="main-content",
className="main-content-expanded",
children=dash.page_container,
)
page = dbc.Row(
id="page",
children=[
sidebar,
main_content,
],
)
url = dcc.Location(id="url", refresh=False)
# App …Run Code Online (Sandbox Code Playgroud) 我在部署到 Heroku 时遇到错误。错误:无法为 pycrypto 构建轮子,这是安装基于 pyproject.toml 的项目所必需的。但是,我的项目没有指定使用 pycrypto。是什么导致了这个问题?我的requirements.txt看起来像:
\nHeroku CLI output\n Building wheel for pycrypto (setup.py): started\nremote: Building wheel for pycrypto (setup.py): finished with status 'error'\nremote: error: subprocess-exited-with-error\nremote:\nremote: \xc3\x97 python setup.py bdist_wheel did not run successfully.\nremote: \xe2\x94\x82 exit code: 1\nremote: \xe2\x95\xb0\xe2\x94\x80> [71 lines of output]\nremote: checking for gcc... gcc\nremote: checking whether the C compiler works... yes\nremote: checking …Run Code Online (Sandbox Code Playgroud) 我必须设计一个提供Flask服务和Dash服务的Web应用程序。例如,我想在Flask中创建一个结合Dash应用程序的登录名。问题是我无法将烧瓶登录名与破折号绑定。我需要一个类似“ @require_login”的方法来过滤对Dash服务的访问。代码如下:
app_flask = Flask(__name__)
app_flask.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////login.db'
app_flask.config['SECRET_KEY'] = 'thisissecret'
db = SQLAlchemy(app_flask)
login_manager = LoginManager()
login_manager.init_app(app_flask)
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(30), unique=True)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@app_flask.route('/')
def index():
user = User.query.filter_by(username='admin').first()
login_user(user)
return 'You are now logged in!'
@app_flask.route('/logout')
@login_required
def logout():
logout_user()
return 'You are now logged out!'
@app_flask.route('/home')
@login_required
def home():
return 'The current FLASK user is ' + current_user.username
# TODO how to add login_required for dash?
app_dash …Run Code Online (Sandbox Code Playgroud) plotly-dash ×10
python ×9
plotly ×2
dockerfile ×1
flask ×1
gunicorn ×1
heroku ×1
javascript ×1
plotly.js ×1