【问题标题】:Python converting waterfall figure to plotlyPython将瀑布图转换为plotly
【发布时间】:2018-11-14 07:39:09
【问题描述】:

我正在使用 Python 中的 waterfall_chart 包来创建瀑布图。该包主要在后端使用matplotlib,所以我试图使用tls.mpl_to_plotly(mpl_fig)函数将matplotlib数字转换为plotly。但是在转换时,会弹出一个错误。有没有办法将waterfall_chart 转换为plotly 或者有一种简单的方法可以直接在plotly 中创建图表?我在plotly 中看到了一些关于类似chart 的先前讨论,但它涉及到图表编号的手动编码。

您可以使用以下代码重新创建图表。

import waterfall_chart
import matplotlib.pyplot as plt
import plotly.tools as tls

a = ['sales','returns','credit fees','rebates','late charges','shipping']
b = [10,-30,-7.5,-25,95,-7]
mpl_fig = plt.figure()
waterfall_chart.plot(a, b)

plt.show()

waterfall chart

但是当我尝试使用mpl_to_plotly() 转换为plotly 时,出现错误:

plotly_fig = tls.mpl_to_plotly(mpl_fig)

ValueError: min() arg is an empty sequence

waterfall_chart 包的详细信息可以在这里找到:https://github.com/chrispaulca/waterfall/blob/master/waterfall_chart.py

【问题讨论】:

    标签: python matplotlib plotly


    【解决方案1】:

    我的回答地址

    [...] 还是有一种简单的方法可以直接在 plotly 中创建图表?


    使用较新版本的 plotly,您可以使用 plotly.graph_objs.Waterfall

    以下是您的数据样本的基本示例,其中设置了在离线 Jupyter Notebook 中使用 iplot 的设置:

    剧情:

    代码:

    # imports
    import plotly
    from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
    from IPython.core.display import display, HTML
    import plotly.figure_factory as ff
    import plotly.graph_objs as go
    import pandas as pd
    import numpy as np
    
    # setup
    display(HTML("<style>.container { width:35% !important; } .widget-select > select {background-color: gainsboro;}</style>"))
    init_notebook_mode(connected=True)
    np.random.seed(1)
    
    import plotly.offline as py
    import plotly.graph_objs as go
    py.init_notebook_mode(connected = False)
    
    # your values
    a = ['sales','returns','credit fees','rebates','late charges','shipping']
    b = [10,-30,-7.5,-25,95,-7]
    
    # waterfall trace
    trace = go.Waterfall(
         x = a, 
        textposition = "outside", 
        text = [str(elem) for elem in b], 
        y = b, 
        connector = {"line":{"color":"rgb(63, 63, 63)"}}, 
    )
    
    layout = go.Layout(
            title = "Waterfall chart, plotly version 3.9.0", 
            showlegend = True
    )
    
    iplot(go.Figure([trace], layout))
    

    检查您的版本:

    import plotly
    plotly.__version__
    

    使用以下命令在 cmd 控制台中更新您的版本:

    pip install plotly --upgrade
    

    【讨论】:

      【解决方案2】:

      列表 a 的长度为 6,列表 b 的长度为 5。 Matplotlib 拒绝显示空数组、列表或其他任何内容。 解决它为 b 添加一个数字或 0 或在您的代码中添加一个 if,以避免 matplotlib 得到一个空序列。

      【讨论】:

        猜你喜欢
        • 2012-06-27
        • 1970-01-01
        • 2017-09-10
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 2019-11-12
        • 2020-01-14
        • 1970-01-01
        相关资源
        最近更新 更多