Dash -包括自定义html对象

fcg9iug3  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(179)

我用Python创建了一个Dash应用程序来展示我执行的一些主题分析的结果。对于主题分析,有一个很好的可视化工具叫做pyLDAvis。我使用了这个工具,并将其输出保存为一个名为lda.html的html文件:

# Visualisatie
topic_data =  pyLDAvis.gensim.prepare(ldamodel, doc_term_matrix, dictionary, mds = "mmds")#mds = 'pcoa')
pyLDAvis.save_html(topic_data, 'lda.html')
pyLDAvis.display(topic_data)

我当前的Dash应用程序包含一个可以根据多个主题进行过滤的表。在该表下面,我想展示lda.html。下面的代码包含了我所做的一些尝试

#import os

#STATIC_PATH = os.path.join(os.path.dirname(os.path.abspath('lda.html')), 'static')
#STATIC_PATH
import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import plotly.express as px
import dash_dangerously_set_inner_html
from dash import dash_table
from dash.dependencies import Input
from dash.dependencies import Output

app = dash.Dash()

topics = df_topics_wegschrijven['Topic'].unique().tolist()
                                  
app.layout = html.Div(
    children=[
        dcc.Dropdown(
            id="filter_dropdown",
            options=[{"label": tp, "value": tp} for tp in topics],
            placeholder="Selecteer een topic",
            multi=True,
            value=df_topics_wegschrijven.Topic.unique(),
        ),
        dash_table.DataTable(id = "table-container", 
                             data = df_topics_wegschrijven.to_dict('records'), 
                             columns =  [{"name": i, "id": i} for i in df_topics_wegschrijven.columns],
                            ),
        #html.Iframe(src='/static/lda.hmtl'), #style=dict(position="absolute", left="0", top="0", width="100%", height="100%"))
        html.Iframe(src=r"C:\Users\MyUserName\Documents\lda.html")
        #html.Iframe(topic_data)
    ]
)  

@app.callback(
    Output("table-container", "data"), 
    Input("filter_dropdown", "value")
)
def display_table(topic):
    dff = df[df_topics_wegschrijven.Topic.isin(topic)]
    return dff.to_dict("records")

if __name__ == '__main__':
    app.run_server(debug=False)

此代码输出以下内容:

正如您所看到的,这里有一个空白的白色方块,我希望我的lda.hmtl在这里。对于我注解掉的代码,结果是:
1.请检查您输入的网址是否正确,如果您是手动输入的,请检查您输入的网址是否正确,然后再试一次。

  1. Iframe(topic_data)-〉整个dash应用程序变成“加载布局时出错”。
    在我看来,我在未注解代码中所做的应该是正确的(即,除了正方形为空之外,没有错误反馈),但我不明白为什么它返回一个空正方形。
    当我尝试
import webbrowser
  
webbrowser.open_new_tab('lda.html')

可视化按预期加载。我只是不能让它在我的Dash应用程序中工作。
有人对我如何解决问题并将pyLDAvis html文件正确加载到Dash有什么建议吗?

twh00eeo

twh00eeo1#

您将文件扩展名写为.hmtl而不是.html。这可能是第一个问题的原因。

更新

我注意到你把lda.html放到了static文件夹中。在Dash中,assets文件夹用于存储外部资源。

html.Iframe(src='assets/lda.html')

或者更像Python

html.Iframe(src=app.get_asset_url('lda.html'))

相关问题