Python中的堆积条形图

时间:2018-04-17 13:46:45

标签: python plotly

我正在关注此链接以研究https://plot.ly/python/bar-charts/ 使用plotly在python中绘制图表。

根据我的要求,我有

形式的样本数据
data=[                                               
      ('2018-04-17','22:00:00',['p1',5],['p2',10],['p3',15]),
      ('2018-04-18','20:00:00',['p3',5],['p4',10],['p3',15])
     ]

所以我想用plotly创建这个数据的堆积条形图。 在X轴上,将绘制元组的前两个值(日期和时间)。

在y轴上,一个堆叠图形,其中三个值与条形高度相关联(将在鼠标悬停时显示)。此数据中共有4个值(p1,p2,p3,p4) ,将使用四种不同的颜色。

我尝试过:我基本上尝试使用所示方法进行点击和试用,例如使用绘图离线图形对象获取两个数据值。但我无法绘制它。

任何人都可以提供有关这些数据的堆积直方图的建议。我必须在浏览器中查看生成的文件,我在离线模式下使用plotly。

我尝试了哪些代码:

    import plotly
    import plotly.graph_objs as go

    plotly.offline.init_notebook_mode(connected=True)


    data=[                                               
          ('2018-04-17','22:00:00',['p1',5],['p2',10],['p3',15]),
          ('2018-04-18','20:00:00',['p3',5],['p4',10],['p3',15])
         ]


    x_axis=[]
    y_axis=[]
    plot_data=[]
    for d in data
        date,time=d[0],d[1]
        x_axis.append(d[0]+" "+d[1])
        for j in range (2, len(d))
            y_axis.append(d[j][1])

        trace[]=go.Bar(
                x=x_axis,
                y=y_axis)
        plot_data.append(trace)

    plotly.offline.plot(plot_data, filename='stacked-bar')

1 个答案:

答案 0 :(得分:1)

您需要使用figlayout。在layout中,将barmode设置为等于stack

import plotly
import plotly.graph_objs as go
plotly.offline.init_notebook_mode(connected=True)

data=[                                               
      ('2018-04-17','22:00:00',['p1',5],['p2',10],['p3',15]),
      ('2018-04-18','20:00:00',['p3',5],['p4',10],['p3',15])
     ]
x_axis=[]
y_axis=[]
plot_data=[]
for d in data:
    date,time=d[0],d[1]
    x_axis.append(d[0]+" "+d[1])
    for j in range (2, len(d)):
        y_axis.append(d[j][1])
        trace=go.Bar(
            x=x_axis,
            y=y_axis)
        plot_data.append(trace)
layout = go.Layout(barmode="stack")
fig = go.Figure(data=plot_data, layout=layout)
plotly.offline.plot(fig, filename='stacked-bar.html')

您的输出应如下所示: It is what your looking for, yep?)