Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect fill in graph objects when connectgaps is set to false #5105

Open
NoniosTheMad opened this issue Mar 21, 2025 · 2 comments
Open

Incorrect fill in graph objects when connectgaps is set to false #5105

NoniosTheMad opened this issue Mar 21, 2025 · 2 comments
Labels
bug something broken P2 considered for next cycle

Comments

@NoniosTheMad
Copy link

NoniosTheMad commented Mar 21, 2025

Whenever a graph object has the following parameters:
First series -> fill='tonexty',
Second series -> connectgaps=False

The fill connects the first point of this series with the first point of the last segment after "gaps" from the second series, instead of its respective first value.

Here is a basic example

import plotly.graph_objects as go

fig = go.Figure()

def remove_from_list(lst, idx):
    return lst[:idx] + [None] + lst[idx+1:]

x = [i for i in range(5)]

y = [1 for _ in x]
fig.add_trace(go.Scatter(
    x=x,
    y=remove_from_list(y, 2),
    connectgaps=False
))

y = [2 for _ in x]
fig.add_trace(go.Scatter(
    x=x,
    y=y,
    fill='tonexty',
))

fig.show()

Image

Here is another example with more than 1 gap in the data:

import plotly.graph_objects as go

fig = go.Figure()

def remove_from_list(lst, idx):
    return lst[:idx] + [None] + lst[idx+1:]

x = [i for i in range(8)]

y = [1 for _ in x]
fig.add_trace(go.Scatter(
    x=x,
    y=remove_from_list(remove_from_list(y, 2), 5),
    connectgaps=False
))

y = [2 for _ in x]
fig.add_trace(go.Scatter(
    x=x,
    y=y,
    fill='tonexty',
))

fig.show()

Image

I've also attached their respective figure outuputs.

Finally, I have an additional comment regarding how areas are filled.
The following shows another basic example with gaps in both series, and both with connectgaps=False.

import plotly.graph_objects as go

fig = go.Figure()

def remove_from_list(lst, idx):
    return lst[:idx] + [None] + lst[idx+1:]

x = [i for i in range(5)]

y = [1 for _ in x]
fig.add_trace(go.Scatter(
    x=x,
    y=remove_from_list(y, 2),
    connectgaps=False
))

y = [2 for _ in x]
fig.add_trace(go.Scatter(
    x=x,
    y=remove_from_list(y, 2),
    fill='tonexty',
    connectgaps=False
))

fig.show()

The connected area spans even the places where the values are undefined (during a gap). My expectation would be the opposite:
Image

@gvwilson gvwilson added bug something broken P2 considered for next cycle labels Mar 21, 2025
@gvwilson
Copy link
Contributor

Thanks for the bug report @NoniosTheMad - can you please run pip list or the equivalent and give us the versions of Python and plotly.py you're using? thanks - @gvwilson

@NoniosTheMad
Copy link
Author

Of course:

Package Version


asttokens 3.0.0
attrs 25.3.0
colorama 0.4.6
comm 0.2.2
debugpy 1.8.13
decorator 5.2.1
executing 2.2.0
fastjsonschema 2.21.1
ipykernel 6.29.5
ipython 9.0.2
ipython_pygments_lexers 1.1.1
jedi 0.19.2
jsonschema 4.23.0
jsonschema-specifications 2024.10.1
jupyter_client 8.6.3
jupyter_core 5.7.2
matplotlib-inline 0.1.7
narwhals 1.31.0
nbformat 5.10.4
nest-asyncio 1.6.0
packaging 24.2
parso 0.8.4
pip 24.3.1
platformdirs 4.3.7
plotly 6.0.1
prompt_toolkit 3.0.50
psutil 7.0.0
pure_eval 0.2.3
Pygments 2.19.1
python-dateutil 2.9.0.post0
pywin32 310
pyzmq 26.3.0
referencing 0.36.2
rpds-py 0.23.1
six 1.17.0
stack-data 0.6.3
tornado 6.4.2
traitlets 5.14.3
typing_extensions 4.12.2
wcwidth 0.2.13

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug something broken P2 considered for next cycle
Projects
None yet
Development

No branches or pull requests

2 participants