Plotly: ось X не заполняет всю серию - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь построить гистограмму, Продажа против категорий. Ниже мой фрейм данных,

  S2PName-Category  S2BillDate   totSale  count
0        Beverages  2020-03-06   4452.62    252
1             Food  2020-03-06  36556.91    774
2           Others  2020-03-06    608.95     99
3           Snacks  2020-03-06   2662.75    139
4            Juice  2020-03-06   2139.49     40
5         IceCream  2020-03-06    135.00      4
6              OOB  2020-03-06    390.00     20

Мой код:

data = [go.Bar(x=df['S2PName-Category'].unique(),
        y=df[df['S2PName-Category']==category]['totSale'],
        name = category) for category in df['S2PName-Category'].unique()]

layout = go.Layout(title='Category wise performance',
        xaxis = dict(title = 'Categories', automargin = True),
        yaxis = dict(tickprefix= '₹', tickformat=',.2f',type='log',autorange = True),
        hovermode = 'closest',
        plot_bgcolor =  colors['background'],
        paper_bgcolor = colors['background'],
        font = dict(color = colors['text'])
        )

Мой график: enter image description here

Только напитки из категории ('S2PName-Category'), заполняется по оси x, остальные не заполняются. Кто-нибудь может указать, что пошло не так, и как это решить? Спасибо!

ПРОБНАЯ ВЕРСИЯ 2: Я пробовал другие возможности: из-за понимания списка моя гистограмма сгруппирована, есть ли способ получить уникальные категории для построения?

Код:

data = [go.Bar(x=df['S2PName-Category'],
        y=df['totSale'],
        name = category) for category in df['S2PName-Category'].unique()]

    layout = go.Layout(title='Category wise performance',
        xaxis = dict(title = 'Categories', automargin = True),
        yaxis = dict(tickprefix= '₹', tickformat=',.2f',type='log',autorange = True),
        hovermode = 'closest',
        plot_bgcolor =  colors['background'],
        paper_bgcolor = colors['background'],
        font = dict(color = colors['text'])
        )

График Op: enter image description here

1 Ответ

1 голос
/ 04 мая 2020

Если предоставленный вами образец данных действительно представляет ваш реальный источник данных, вы можете просто установить цифру с помощью go.Figure() и добавить индивидуальную трассировку для каждого 'S2PName-Category' Если этого недостаточно, вам придется предоставить лучший образец данных.

enter image description here

Полный код:

import plotly.express as px
import pandas as pd
import plotly.graph_objs as go

df = pd.DataFrame({'S2PName-Category': {0: 'Beverages',
                    1: 'Food',
                    2: 'Others',
                    3: 'Snacks',
                    4: 'Juice',
                    5: 'IceCream',
                    6: 'OOB'},
                    'S2BillDate': {0: '2020-03-06',
                    1: '2020-03-06',
                    2: '2020-03-06',
                    3: '2020-03-06',
                    4: '2020-03-06',
                    5: '2020-03-06',
                    6: '2020-03-06'},
                    'totSale': {0: 4452.62,
                    1: 36556.91,
                    2: 608.95,
                    3: 2662.75,
                    4: 2139.49,
                    5: 135.0,
                    6: 390.0},
                    'count': {0: 252, 1: 774, 2: 99, 3: 139, 4: 40, 5: 4, 6: 20}})


fig = go.Figure()
for cat in df['S2PName-Category']:
    dft = df[df['S2PName-Category']==cat]
    fig.add_traces(go.Bar(x=dft['S2PName-Category'], y=dft['totSale'], name=cat))

fig.show()
...