Python Plotly - Внедрение диаграммы в HTML в HTML (не работает)

Я построил диаграмму, которую я хочу встроить в файл HTML. Если я использую plotly онлайн, он работает по назначению. Однако, если я использую OFFLINE, работает автономный график (т.е. Он открывает в нем отдельную HTML-диаграмму), но он не встраивается в HTML (nick.html), т.е. iframe пуст.

Это мой код:

fig = dict(data=data, layout=layout)
plotly.tools.set_credentials_file(username='*****', api_key='*****')
aPlot = plotly.offline.plot(fig, config={"displayModeBar": False}, show_link=False,
                             filename='pandas-continuous-error-bars.html')

html_string = '''
<html>
    <head>
        <link rel="stylesheet" href="#" onclick="location.href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css'; return false;">
        <style>body{ margin:0 100; background:whitesmoke; }</style>
    </head>
    <body>
        <h1>Monthly Report</h1>

        <!-- *** Section 1 *** --->
        <h2></h2>
        <iframe width="1000" height="550" frameborder="0" seamless="seamless" scrolling="no" \
src="''' + aPlot + '''.embed?width=800&height=550"></iframe>
        <p> (Insights).</p>


    </body>
</html>'''

f = open("C:/Users/nicholas\Desktop/nick.html",'w')
f.write(html_string)
f.close()

Кто-нибудь знает, почему он не внедряется и как его исправлять?

Ответы

Ответ 1

aPlot - это имя файла Plotly.

В iframe вы добавляете .embed?width=800&height=550 к имени файла, в результате чего имя файла не существует.

Когда вы удаляете эту строку, т.е. src="''' + aPlot + '''", она должна работать.

Вместо того, чтобы вставлять весь HTML файл, вы также можете использовать предлагаемый подход здесь, который генерирует более мелкий HTML файл, т.е. генерирует div со всей необходимой информацией и включите plotly.js в свой заголовок.

import plotly

fig = {'data': [{'x': [1,2,3],
                  'y': [2,5,3],
                  'type': 'bar'}],
      'layout': {'width': 800,
                 'height': 550}}

aPlot = plotly.offline.plot(fig, 
                            config={"displayModeBar": False}, 
                            show_link=False, 
                            include_plotlyjs=False, 
                            output_type='div')

html_string = '''
<html>
    <head>
      <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
      <link rel="stylesheet" href="#" onclick="location.href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css'; return false;">
      <style>body{ margin:0 100; background:whitesmoke; }</style>
    </head>
    <body>
      <h1>Monthly Report</h1>
      ''' + aPlot + '''
    </body>
</html>'''

with open("nick.html", 'w') as f:
    f.write(html_string)