我想在我正在Beeware上开发的 Android 应用程序中使用破折号交互式图表。如何将 Dash Plotly 与 Beeware 结合使用?
我想使用 rq 在单独的工作人员上运行任务,以从测量仪器收集数据。用户按下仪表板应用程序上的按钮将发出任务结束的信号。问题是任务本身不知道何时终止,因为它无权访问 dash 应用程序的上下文。
我已经习惯meta将信息从工作人员传递回调用者,但是我可以将信息从调用者传递给工作人员吗?
示例任务:
from rq import get_current_job
from time import time
def mock_measurement():
job = get_current_job()
t_start = time()
# Run the measurement
t = []
i = []
job.meta['should_stop'] = False # I want to use this tag to tell the job to stop
while not job.meta['should_stop']:
t.append(time() - t_start)
i.append(np.random.random())
job.meta['data'] = (t, i)
job.save_meta()
sleep(5)
print("Job Finished")
Run Code Online (Sandbox Code Playgroud)
从控制台,我可以开始这样的工作
queue = rq.Queue('test-app', connection=Redis('localhost', 6379))
job = queue.enqueue('tasks.mock_measurement')
Run Code Online (Sandbox Code Playgroud)
我希望能够从控制台执行此操作,以向工作人员表明它可以停止运行:
job.meta['should_stop'] = True
job.save_meta() …Run Code Online (Sandbox Code Playgroud) 我有一个带有可删除行和列的破折号 DataTable 对象。我想根据可见行更新数字。我不确定如何创建回调以及要传递哪些参数。当在浏览器中删除行时,存储在表对象中的数据实际上可能不会改变。
from dash_table import DataTable
def lineplot(id, df, cols, title=None, xlabel=None, ylabel=None, x=None,
xaxis_type=None, yaxis_type=None, plotly_config=plotly_config,
):
if x is None:
x_values = df.index
xlabel = df.index.name
else:
x_values = df[x]
data = [{
'x': x_values,
'y': df[col],
'name': col } for col in cols]
layout = go.Layout(
title=go.layout.Title(
text=title,
xref='paper',
xanchor='center'
),
xaxis = go.layout.XAxis(
title=go.layout.xaxis.Title(
text=xlabel,
font=plotly_config['font'],
),
type=xaxis_type
),
yaxis=go.layout.YAxis(
title=go.layout.yaxis.Title(
text=ylabel,
font=plotly_config['font'],
),
type=yaxis_type
),
showlegend=True
)
return dcc.Graph(
id=id,
figure={'data': data,
'layout': layout}, …Run Code Online (Sandbox Code Playgroud) 使用 Django-plotly-dash 模块和 dash 应用程序在一个非常小的窗口中渲染。除了典型的 css 之外,我还能做些什么来渲染这个完整的页面吗?
我尝试过更新特定 div 的样式以及更新整个页面中的样式。
...
{% extends 'base_page.html' %}
{% block content %}
<head>
</head>
<body>
{%load plotly_dash%}
<div class={% plotly_class name="SimpleExample"%}>
{% plotly_app name="SimpleExample" %}
</div>
</body>
{% endblock %}
...
Run Code Online (Sandbox Code Playgroud)
期望 div 是整页,但它只呈现一个非常小的窗口
我是 dash 的新手,正在尝试制作一个基本表格来显示在 IP 上供每个人查看。这样就不需要电子邮件或将数据放置在特定的任何地方。我使用以下代码创建一个从文档中提取的非常简单的破折号表,但我想定期更新仪表板。为此,我使用任务计划程序每 30 分钟运行一次代码,从而终止旧实例。这样,当更新“data.csv”时,表中将显示一个新的数据框。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
df = pd.read_csv('data.csv')
def generate_table(dataframe, max_rows=30):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr([
html.Td(dataframe.iloc[i][col]) for col in dataframe.columns
]) for i in range(min(len(dataframe), max_rows))]
)
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(children=[
html.H4(children='Title'),
generate_table(df, max_rows=len(df))
])
if __name__ == '__main__':
ADDRESS='100.100.100.100' #ipv4 address for computer code is run on
PORT=int(1000) …Run Code Online (Sandbox Code Playgroud) 嘿那里!这是我的桌子的样子。 我的破折号代码输出
我想在 python 控制台中打印所选行的 NGID 值。我已经创建了回调函数。但是当我选择该行时它什么也不做
这是我的布局的代码:
def dasher():
df = pd.read_csv('wyjebany.csv')
df = df[~df.HOME.str.contains('Beach|Futsal')]
df = df[~df.COUNTRY.str.contains('Germany Oberliga NOFV|France Youth U19
League|Portugal Champions NACIONAL Juniores A 1|Spanish Bizkaia-Tercera')]
df = df.replace(to_replace='Division|League|Liga|Footbal|Primavera', value='',
regex=True)
# df = df.replace(to_replace='.', value='', regex=True)
print(df)
print(df.columns)
app.layout = dash_table.DataTable(
columns=[{"name": i, "id": i} for i in df.columns],
row_selectable='multi',
sort_action='native',
# editable=True,
row_deletable=True,
# rows=[{}],
selected_rows=[],
css=[{'selector': 'tr:hover',
'rule': 'background-color: #80FF80',
# 'font-family': 'Times New Roman',
}],
html.Div(id='hidden-div', style={'display': 'none'},
),
Run Code Online (Sandbox Code Playgroud)
这是回调函数的代码
@app.callback(
dash.dependencies.Output('hidden-div', …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种方法可以让破折号表在滚动条可用时自动上下垂直滚动。
这是一个简单的示例(我使用相同的数据帧 7 次以使其足够长)。
import dash
import dash_table
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
long_data = pd.concat([df,df,df,df,df,df,df])
app = dash.Dash(__name__)
app.layout = dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in long_data.columns],
data=long_data.to_dict('records'),
)
if __name__ == '__main__':
app.run_server(debug=False)
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个页面上的内容垂直向上和向下?
我想上传 csv 文件并生成一个从 csv 文件输出数据的图表,我可以上传 csv 并使用 dash_table 显示数据,但我无法使图表正常工作。上传 csv 文件后出现错误:无效参数figure.data传递到 ID 为“Mygraph”的图表中。期望一个数组。供应类型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 …Run Code Online (Sandbox Code Playgroud) 我在使用 Plotly Dash 时遇到问题,组件触发的回调dcc.Store每次都会触发两次。请参阅下面的代码和示例输出代码,该代码基于 Dash 文档中的示例 ( https://dash.plot.ly/dash-core-components/store )。
任何人都可以解释这一点或建议解决方法来防止它吗?
最小工作示例代码:
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Output, Input, State
from dash.exceptions import PreventUpdate
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Store(id='local', storage_type='local'),
html.Div(html.Button('localStorage', id='local-button')),
html.Div(0, id='local-clicks'),
])
@app.callback(Output('local', 'data'),
[Input('local-button', 'n_clicks')],
[State('local', 'data')])
def on_click(n_clicks, data):
if n_clicks is None:
raise PreventUpdate
app.logger.info(f"Updating data store")
data = data or {'clicks': 0}
data['clicks'] = data['clicks'] + 1
return data
@app.callback(Output('local-clicks', 'children'),
[Input('local', …Run Code Online (Sandbox Code Playgroud) 我试图在使用 CSS 属性更新 Dash 图形时显示微调器data-dash-is-loading。
我找到了一个可行的解决方案,但想知道为什么我之前的方法无法获得更多见解。
文档的结构是
html.Div(id="some-container",
children=[dcc.Graph(id="some-graph",
figure=fig)])
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的两个回调函数,一次一个。工作回调函数更新整个容器的子级:
@app.callback(
Output("some-container", "children"),
[Input("some-dropdown", "value")])
Run Code Online (Sandbox Code Playgroud)
不起作用的回调函数是
@app.callback(
Output("some-graph", "figure"),
[Input("some-dropdown", "value")])
Run Code Online (Sandbox Code Playgroud)
嗯,它工作得很好,它按应有的方式更新了图形,但它不会触发data-dash-is-loading.
CSS 代码取自这里:
*[data-dash-is-loading="true"]{
visibility: hidden;
}
*[data-dash-is-loading="true"]::before{
content: "Loading...";
display: inline-block;
color: magenta;
visibility: visible;
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我原因是什么吗?