plotly / plotly/plotly.py

Bar charts don't group when there's only 1 group

Aperta
#5,295 1 commento 2 reazioni 1 assegnatario Vedi su GitHub

@camdecoster ci sta già lavorando.

Dal 1/8/2025.

bug P1
Lingua principale
Python
Stelle
18.8k
Fork
2.8k
Merge medio
16h 26m
PR unite (30g)
21

Descrizione

I found this issue while trying to work around https://github.com/plotly/plotly.py/issues/5294

Plotly version: 6.2.0

Minimal Example
import plotly.graph_objects as go
import pandas as pd
import datetime

data = [
    {"date": datetime.date(2025,7,20), "net_sales": 23.34, "gross_sales": 32.98},
    {"date": datetime.date(2025,7,21), "net_sales": 45.21, "gross_sales": 68.12},
    {"date": datetime.date(2025,7,22), "net_sales": 12.98, "gross_sales": 34.54},
    {"date": datetime.date(2025,7,23), "net_sales": 41.32, "gross_sales": 45.32},
]

df = pd.DataFrame.from_records(data)

def make_figure(df, width=None):
    fig = go.Figure()
    fig.add_trace(go.Bar(
        x=df['date'],
        y=df['gross_sales'],
        xperiod=24*60*60*1000,
        xperiod0=df['date'].min(),
        xperiodalignment="middle",
        width=24*60*60*1000 * 0.4,
        opacity=0.6,
        offsetgroup='gross'  # same behaviour exhibited whether or not this is specified
    ))
    fig.add_trace(go.Bar(
        x=df['date'],
        y=df['net_sales'],
        xperiod=24*60*60*1000,
        xperiod0=df['date'].min(),
        xperiodalignment="middle",
        width=24*60*60*1000 * 0.4,
        opacity=0.6,
        offsetgroup='net'  # same behaviour exhibited whether or not this is specified
    ))
    fig.update_layout(
        barmode='group',
        xaxis={
            'ticklabelmode': 'period',
            'tickmode': 'auto',
            'dtick': 24*60*60*1000,
            'range': (df['date'].min(), df['date'].max() + datetime.timedelta(days=1)),
        })
    fig.show(renderer="browser")

make_figure(df)
make_figure(df[0:1])

When plotting a grouped bar chart of aggregated timeseries data, strange behaviour happens when there's only 1 group in the data. When there are multiple groups of data each bar is displayed as one would expect (first screenshot below), but when there's only a single data point the bars overlap (second screenshot). These bars overlap regardless of whether the offsetgroup or alignmentgroup is specified, and the offset must be manually set in order to get consistent behaviour regardless of the data provided.

Image Image

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.