Python将瀑布图转换为plotly
Posted
技术标签:
【中文标题】Python将瀑布图转换为plotly【英文标题】:Python converting waterfall figure to 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
【问题讨论】:
【参考方案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 得到一个空序列。
【讨论】:
以上是关于Python将瀑布图转换为plotly的主要内容,如果未能解决你的问题,请参考以下文章
将 dataFrame 转换为可读的,以便使用 plotly express 绘制条形图
如何转换 Excel 导入的数据以使用 Plotly 3D 曲面图?
R语言使用hexSticker包将R原生使用plot函数可视化的结果转换为六角图(六角贴六角形贴纸base plot to hex sticker)