Getting [removed] and
tags from Plotly using Python

后端 未结 3 1862
失恋的感觉
失恋的感觉 2020-12-30 10:55

I was wondering if anyone knew a good way (preferably a built in method, but I\'m open to writing my own of course) to get the

相关标签:
3条回答
  • 2020-12-30 11:13

    If you call:

    plotly.offline.plot(data, filename='file.html')
    

    It creates a file named file.html and opens it up in your web browser. However, if you do:

    plotly.offline.plot(data, include_plotlyjs=False, output_type='div')
    

    the call will return a string with only the div required to create the chart, which you can store in whatever variable you desire (and not to disk).

    I just tried it and it returned, for a given chart that I was doing:

    <div id="82072c0d-ba8d-4e86-b000-0892be065ca8" style="height: 100%; width: 100%;" class="plotly-graph-div"></div>
    <script type="text/javascript">window.PLOTLYENV=window.PLOTLYENV || {};window.PLOTLYENV.BASE_URL="https://plot.ly";Plotly.newPlot("82072c0d-ba8d-4e86-b000-0892be065ca8", 
    [{"y": ..bunch of data..., "x": ..lots of data.., {"showlegend": true, "title": "the title", "xaxis": {"zeroline": true, "showline": true}, 
    "yaxis": {"zeroline": true, "showline": true, "range": [0, 22.63852380952382]}}, {"linkText": "Export to plot.ly", "showLink": true})</script>
    

    Notice how its just a tiny portion of an html that you are supposed to embed in a bigger page. For that I use a standard template engine like Jinga2.

    With this you can create one html page with several charts arranged the way you want, and even return it as a server response to an ajax call, pretty sweet.

    Update:

    Remember that you'll need to include the plotly js file for all these charts to work.

    You could include <script src="https://cdn.plot.ly/plotly-latest.min.js"></script> just before putting the div you got. If you put this js at the bottom of the page, the charts won't work.

    0 讨论(0)
  • 2020-12-30 11:14

    Apologies for the necro-answer really wanted to add a comment to Fermin Silva left behind (https://stackoverflow.com/a/38033016/2805700) - but long standing lurker reputation prevents me.

    Anyhow I had a similar need and encoutered an issue with plotly 2.2.2

    plotly.offline.plot(data, include_plotlyjs=False, output_type='div')
    

    The include_plotlyjs parameter was being ignored when outputting to a div. Based on the comments above, I found a workaround. Basically let plotly plot to file, which does respect the include_plotlyjs parameter. Load into beautiful soup and inject the link to the latest plotly.js on the cdn.

    import plotly
    import bs4
    
    # return as html fragment
    # the include_plotlyjs argument seems to be 
    # ignored as it's included regardless when outputting to div
    # found an open issue on here - https://github.com/plotly/plotly.py/issues/1043
    plotly.offline.plot(
        plot_output, 
        filename = filename,
        config = plot_config,
        include_plotlyjs = False,
        auto_open = False,
    )
    
    # load the file
    with open(filename) as inf:
        txt = inf.read()
        soup = bs4.BeautifulSoup(txt)
    
    # add in the latest plot-ly js as per https://stackoverflow.com/a/38033016/2805700
    js_src = soup.new_tag("script", src="https://cdn.plot.ly/plotly-latest.min.js")
    # insert it into the document
    soup.head.insert(0, js_src)
    
    # save the file again
    with open(filename, "w") as outf:
        outf.write(str(soup))
    

    Cheers

    0 讨论(0)
  • 2020-12-30 11:28

    With Plotly 4, use plotly.io.to_html:

    import plotly
    
    # Returns a `<div>` and `<script>`
    plotly.io.to_html(figure, include_plotlyjs=False, full_html=False)
    
    # Returns a full standalone HTML
    plotly.io.to_html(figure)
    

    Reference: https://plotly.com/python-api-reference/generated/plotly.io.to_html.html

    0 讨论(0)
提交回复
热议问题