Гистограмма с накоплением в Python

Я перехожу по этой ссылке, чтобы изучить https://plot.ly/python/bar-charts/ построить графики в Python, используя plotly.

В соответствии с моими требованиями у меня есть образцы данных в форме

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), четыре разных для них будут использованы цвета.

Что я пробовал: я в основном пробовал ударить и испытать, используя показанные методы, такие как получение двух значений данных с использованием графического объекта в автономном режиме, но я не могу его нарисовать.

Кто-нибудь может предоставить предложения по составлению гистограммы этих данных. Мне нужно просмотреть сгенерированный файл в браузере, и я использую график в автономном режиме.

Какой код пробовал:

    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')

person Community    schedule 17.04.2018    source источник
comment
@Alfe: Я пробовал. Где я застрял, так это то, что данные (p1, p2, p3, p4) не являются постоянными на всем протяжении. Как один кортеж имеет p1, p2, p3, другой имеет p4, p5, p6. Будь то же самое, я мог бы легко прочитать list и сначала прочитал индекс строки и прочитал значение индекса в списке. Я действительно сделал это для других данных моего проекта.   -  person    schedule 17.04.2018
comment
Alfe: Да. Можете ли вы просто предложить, если не код :)   -  person    schedule 18.04.2018


Ответы (1)


Вам нужно использовать fig и layout. В 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')

И ваш результат должен выглядеть так:  Это то, что вы ищете, ага?)

person Dmitriy Kisil    schedule 19.08.2018
comment
Мой ответ вам поможет, @ user7350953? - person Dmitriy Kisil; 21.08.2018