Для примера того, как создать столбчатую диаграмму с накоплением с указанным набором данных, взгляните на предложение в Plotly-Dash: хотите, чтобы две столбчатые диаграммы были сложены рядом от одного столбца df .В следующем ответе рассматривается, как вы не можете создать столбчатую диаграмму с накоплением с одной кривой .Чтобы показать вам почему, я начну с того, что может показаться лишними деталями.Но, надеюсь, в конце все будет ясно.
В общих чертах trace
- это термин, используемый для описания graph object
, например Scatter
или Bar
, как в приведенном ниже фрагменте..
Фрагмент 1:
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
data = [go.Bar(
x=['CategoryA', 'CategoryB', 'CategoryC'],
y=[20, 14, 23]
)]
iplot(data)
Если вы посмотрите на фрагмент выше, вы увидите, что , что - это гистограмма содин след в виде go.Bar(x=['CategoryA',...
.
Сюжет 1.1:
Теперь, как мы можем добавить что-то, чтобы сделать его stacked chart
?Если вы начнете с добавления элемента в x
, например 'CategoryD'
, то ничего не произойдет.И это немного интересно, поскольку вы могли бы ожидать сообщения об ошибке вместо этого.
График 1.2: Добавленное значение x
Но ничего не происходит до того, как CategoryD
имеет соответствующее значение y, например 15
:
График 1.3: Добавлены значения x и y
Заключение такfar: добавление значений к x
и y
добавит еще одну категорию на оси x и значение на оси y.Как видите, здесь пока что ничего не получается stacked
:
Но что, если вы добавите термин макета с помощью barmode='stack'
?
Фрагмент 2:
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
data = [go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
y=[20, 14, 23, 15])]
layout = go.Layout(barmode='stack', title = 'Stacked bar chart')
fig = go.Figure(data=data, layout=layout)
iplot(fig)
Участок 2: barmode = 'stack'
Я могу понять любого, кто надеется, что это сведет все данные в одну трассировку, но, похоже, сюжет просто не построен таким образом.Чтобы получить то, что вам нужно, вам нужно добавить еще один след или go.Bar()
объект, подобный этому:
Фрагмент 3:
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
data = [go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
y=[20, 14, 23, 15]),
go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
y=[5, 14, 4, 20])]
layout = go.Layout(barmode='stack', title = 'Stacked bar chart')
fig = go.Figure(data=data, layout=layout)
iplot(fig)
Сюжет3: Добавить трассировку
Обратите внимание, что ни у одного из объектов go.Bar()
не было назначено ни одного имени, и это по умолчанию отображается по умолчанию.называет их trace 0
и trace 1
.Так что, я думаю, правильнее будет сказать, что трасса содержит или «показывает» объект графического графика, а не называет их одним и тем же.Если вы хотите указать другие имена, вы можете сделать это, например, с name = 'segment 1'
, например:
Фрагмент 4:
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
data = [go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
y=[20, 14, 23, 15], name = 'segment 1'),
go.Bar(x=['CategoryA', 'CategoryB', 'CategoryC', 'CategoryD'],
y=[5, 14, 4, 20], name = "segment 2")]
layout = go.Layout(barmode='stack', title = 'Stacked bar chart')
fig = go.Figure(data=data, layout=layout)
iplot(fig)
График 4: Добавить именованные следы
Если вы хотите «расстегнуть» свои бары, просто поменяйте бармод на «группа»'вот так:
layout = go.Layout(barmode='group', title = 'Stacked bar chart')
Участок 5: