plotly.py icon indicating copy to clipboard operation
plotly.py copied to clipboard

y-values overlap when using rangebreaks

Open user529481 opened this issue 4 years ago • 10 comments

picture of behavior: https://imgur.com/a/oSBgqvp

Screen Shot 2020-12-29 at 7 49 51 PM

I believe the same issue is experienced by another user here: https://community.plotly.com/t/rangebreaks-with-bounds-and-values-show-overlapping-candlesticks/46067

code to reproduce this: (example.pkl can be found on https://repl.it/join/pdmlylnv-angstscheisse )

import pandas as pd
import plotly.graph_objects as go

df = pd.read_pickle('example.pkl')

fig = go.Figure(data=[go.Candlestick(x=df['time'], open=df['open'], high=df['high'], low=df['low'], close=df['close'])])

fig.update_xaxes(
    rangebreaks=[
        dict(bounds=[15, 9], pattern="hour"),
        # dict(bounds=["sat", "mon"]),
        dict(values=["2020-12-25"])
    ]
)
fig.show()

user529481 avatar Dec 30 '20 04:12 user529481

Any update on this? it seems the problem still exists.

fjafferi avatar Jun 14 '21 01:06 fjafferi

I'm having trouble loading the pickle file... can someone provide a simple reproducible example of this please?

nicolaskruchten avatar Jun 14 '21 13:06 nicolaskruchten

AAPL_1H.zip Here is a pickle file, I just tried with the code above and it seems okay. However, i was seeing the described behavior above yesterday. Let me reproduce and provide an example.

fjafferi avatar Jun 14 '21 21:06 fjafferi

`import pandas as pd import plotly.graph_objects as go

df = pd.read_pickle('AAPL_1H.pkl')

fig = go.Figure(data=[go.Candlestick(x=df.index, open=df['open'], high=df['high'], low=df['low'], close=df['close'])])

fig.update_xaxes( rangebreaks=[ dict(bounds=[15, 9], pattern="hour"), # dict(bounds=["sat", "mon"]), dict(values=["2021-06-03"]) ] ) fig.show()`

So it seems the problem appears to be when passing the dates list, and if the date falls within the x range. @nicolaskruchten Capture

fjafferi avatar Jun 14 '21 21:06 fjafferi

@fjafferi Thanks for the zipfile but the problem is that I can't unpickle it :) Can you send me a CSV please?

nicolaskruchten avatar Jun 15 '21 14:06 nicolaskruchten

OK, I found the time to get this file parsed. With Plotly.py 5.1 (powered by Plotly.js 2.2) I'm not seeing this behaviour any more:

image

nicolaskruchten avatar Jun 29 '21 15:06 nicolaskruchten

Ah but when uncomment the weekend exclusion I do see a problem:

image

I've logged the issue in the underlying Javascript library as https://github.com/plotly/plotly.js/issues/5783

nicolaskruchten avatar Jun 29 '21 15:06 nicolaskruchten

I had the exact same problem and fixed it in the following way: I changed the order of the arguments that I passed to the function such as in the following example: fig.update_xaxes( rangebreaks=[ dict(values=["2022-12-25"]), # hide holidays (Christmas and New Year's, etc) dict(bounds=["sat", "mon"]), # hide weekends, eg. hide sat to before mon dict(bounds=[18, 6], pattern="hour") # hide hours outside of 6pm-6am ] )

Lucasdesard avatar May 15 '23 16:05 Lucasdesard

I am having similar issue as well. For me the issue is when the holiday and weekend are in consecutive order.

There's two cases:

  1. Sat, Sun, Mon (Holiday)
  2. Fri (Holiday), Sat, Sun.

It seems the reordering of the rangebreaks arguments fixes them but only conditionally.

For example for case 1: The following order works:

dict(values=["2023-05-29"]), # hide holiday that is Monday
dict(bounds=["sat", "mon"]), # hide weekends

and the following causes a bug and shows y-value overlaps:

dict(bounds=["sat", "mon"]), # hide weekends
dict(values=["2023-05-29"]), # hide holiday that is Monday

This occurs reversely for case 2: The following order works:

dict(bounds=["sat", "mon"]), # hide weekends
dict(values=["2023-04-07"]), # hide holiday that is Friday

and the following causes a bug and shows y-value overlaps:

dict(values=["2023-04-07"]), # hide holiday that is Friday
dict(bounds=["sat", "mon"]), # hide weekends

jinseo99 avatar Feb 01 '24 19:02 jinseo99

hi @jinseo99 Thanks for reporting. This seems related to the plotly.js #5783 issue

I've updated the priority of that bug.

Coding-with-Adam avatar Feb 05 '24 21:02 Coding-with-Adam