当前位置: 首页 > 知识库问答 >
问题:

聚合破折号无法动态创建图形

洪增
2023-03-14

我正在使用plotly dash创建一个web应用程序,用于图形生成和回调处理。我使用dash核心组件v0.18.1

尝试动态添加图形时(每次单击按钮时,都会添加新图形),控制台中会出现错误:

bundle.js?v=0.11.2:9未捕获(promise中)错误:未找到dash_core_组件。在Object.resolve(bundle.js?v=0.11.2:9)在s(bundle.js?v=0.11.2:9)在Array.map()在s(bundle.js?v=0.11.2:9)在Array.map()在s(bundle.js?v=0.11.2:9)在e.value(bundle.js?v=0.11.2:9)在p-dom@15.4.2.min.js?v=0.11.2:13)

我只有一个空白页面,上面有一个按钮和一个点击回调。回调只是用一个图填充一个div。

布局代码:

class ContentController(object):

    graph_names = None

    def __init__(self):
        self.graph_names = []
        # UNCOMMENT THIS LINE TO MAKE IT WORK
        # self.graph_names = ["start_graph"]

    def layout(self):
        return html.Div([html.Button("Add Graph", id='button_id'),
                         html.Div(self.graphics_layout, id='graphics_div')],
                        id='main_div')

    @property
    def graphics_layout(self):
        graphs = []
        for name in self.graph_names:
            graph = self.create_graph()
            graphs.append(dcc.Graph(id=name, figure=graph, style=    {'width': '600px', 'height': '300px'}))

        return graphs

    def create_graph(self):
        graph_data = {
               'data': [
                   {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar',     'name': 'SF'},
                   {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar',     'name': u'Montréal'},
               ],
               'layout': {
                   'title': 'Dash Data Visualization'
               }
           }
        return graph_data

回调代码

@app.callback(
    Output(component_id='graphics_div', component_property='children'),
    [Input(component_id='button_id', component_property='n_clicks')]
)
def callback_function(n_clicks):
    print(n_clicks)
    if n_clicks is None:
        return ""

    name = "graph_" + str(n_clicks)
    content.graph_names.append(name)
    return content.graphics_layout

奇怪的是,如果加载页面时出现另一个图形,则一切正常。这是Dash中的一只虫子吗?

共有1个答案

梁丘经艺
2023-03-14

原来这是Dash中的一个缺陷。

解决方法:在加载时创建一个隐藏图,如下所示:

app.layout = html.Div([
    html.Div(id='content'),
    dcc.Location(id='location', refresh=False),
    html.Div(dt.DataTable(rows=[{}]), style={‘display’: ‘none’})
])

原因是,仅当页面加载时才会加载所需的库,因此,如果加载时布局中不存在图形,则不会加载某些破折号库。

更多信息可以在仪表板发行板上找到:这里和这里

 类似资料:
  • 我的dash应用程序具有基于可用dash留档中找到的食谱的导航。它的工作原理,但它不好看。谁知道介绍菜单的更好方法?我不想开发一个特殊的流星组件,但我很乐意使用目前可用的框架之一(引导,语义学,...)。

  • 问题内容: 如何从不带破折号的字符串中创建java.util.UUID? 问题答案: Clojure的带 标签文字是对的传递。并且,将其除以“-”并将其转换为两个值。(UUID的格式已标准化为8-4-4-4-12十六进制数字,但“-”实际上仅用于验证和视觉识别。) 直接的解决方案是重新插入“-”并使用。 如果您想要没有正则表达式的内容,则可以使用和。

  • 我希望能够结合Kibana术语图(能够基于特定属性值的唯一性创建bucket)和直方图(基于查询将数据分离为bucket,然后基于时间说明日期)的功能。 总的来说,我想创建一个直方图,但我只想根据一个查询的结果创建直方图,而不是像Kibana演示应用程序中那样创建多个查询。相反,我希望每个bucket都是根据特定字段的唯一值动态创建的。例如,考虑以下查询返回的数据: 还假设每个记录都有一个字段,用

  • 问题内容: 当字符串具有破折号时,我无法从json对象检索值: 如果我尝试引用已解析的文件,它将返回但jsonObj.user_id将返回6789 我没有办法修改外部api调用返回的值,并且试图解析返回的字符串以删除破折号也会破坏传递的url等。救命? 问题答案: 是减法表达式(即)。 要访问包含不能出现在标识符中的字符的键,请使用方括号:

  • 这是如何与datetime一起工作的?我不能绘图日期时间x日期时间对象?这个问题是由于在y轴上绘制“小时/分钟”时的一些问题,它变得混乱。 在这个例子中,我的小时图从11:13开始,到10:54结束,但是范围是08:33到11:55 在matplotlib中打印时,它可以识别范围(我想要的),但在dash中,它会创建一个从最低值到最高值的阶梯 是的,我已经尝试过'yax':{tickform:'%

  • 我需要在我的Android应用中画一张“闭图”,像这样: 数据的xIndex先增加后减少。如本例所示: 当我尝试用MPAndroidChart中的数据绘制一条线时,它只呈现数据的前半部分(在xIndex下降之前)。其他数据未显示。 我怎样才能用MPAndroidChart正确地绘制这个数据呢?