Plotly: Как сделать гистограмму из одной трассы? - PullRequest
4 голосов
/ 19 марта 2019

Возможно ли иметь две гистограммы, расположенные рядом друг с другом, каждая из которых идет из одного столбца?

Вот мой ДФ:

Field       Issue

Police      Budget cuts
Research    Budget cuts
Police      Time consuming
Banking     Lack of support
Healthcare  Lack of support
Research    Bureaucracy
Healthcare  Bureaucracy
Banking     Budget cuts

Мне нужна столбчатая диаграмма с полями рядом со столбчатой ​​диаграммой проблем по полю.

Спасибо, ребята!

1 Ответ

2 голосов
/ 20 марта 2019

Для примера того, как создать столбчатую диаграмму с накоплением с указанным набором данных, взгляните на предложение в 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:

enter image description here

Теперь, как мы можем добавить что-то, чтобы сделать его stacked chart?Если вы начнете с добавления элемента в x, например 'CategoryD', то ничего не произойдет.И это немного интересно, поскольку вы могли бы ожидать сообщения об ошибке вместо этого.

График 1.2: Добавленное значение x

enter image description here

Но ничего не происходит до того, как CategoryD имеет соответствующее значение y, например 15:

График 1.3: Добавлены значения x и y

Заключение такfar: добавление значений к x и y добавит еще одну категорию на оси x и значение на оси y.Как видите, здесь пока что ничего не получается stacked:

enter image description here

Но что, если вы добавите термин макета с помощью 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'

enter image description here

Я могу понять любого, кто надеется, что это сведет все данные в одну трассировку, но, похоже, сюжет просто не построен таким образом.Чтобы получить то, что вам нужно, вам нужно добавить еще один след или 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: Добавить трассировку

enter image description here

Обратите внимание, что ни у одного из объектов 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: Добавить именованные следы

enter image description here

Если вы хотите «расстегнуть» свои бары, просто поменяйте бармод на «группа»'вот так:

layout = go.Layout(barmode='group', title = 'Stacked bar chart')

Участок 5:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...