plotly / plotly/plotly.py

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

Offen
#5,295 1 Kommentar 2 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@camdecoster arbeitet bereits daran.

Seit 01.8.2025.

bug P1
Vorherrschende Sprache
Python
Sterne
18.8k
Forks
2.8k
Ø Merge
16 Std. 26 Min.
Gemergte PRs (30 T.)
21

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.