I’m using the Bar
trace to plot a timeseries which has data with different time frequencies.
The width of the bars is computed by plotly probably using the initial part of the data, which means that the data with coarser time resolution will have some white gaps in between the bars.
Is there any way to tell plotly to set the bar widths so that there’s no left space in between? I know that you can control the bar widths manually, I just want to avoid having to compute this myself every time…
Hi @guidocioni ,
Try to use sets the axis type as category
to make your make xaxis
have same space each bar.
import plotly.express as px
x=[1,2,3,4,5,6,7,11,15,20,28,38,48,58,68]
y = [0.8, 0.2, 0.7, 0.7, 0.2, 0.7, 0.9, 0.2, 0.1, 0.7, 0.2, 0.2, 0.4, 0.5, 0.8]
fig = px.bar(x=x, y=y)
# set x axis type to `category`, the default value is "-".
fig.update_xaxes(type="category")
fig.show()
Hope this help
I mean, it kind of works, but interpreting a time-series axis as category is a recipe for disaster, I think
I ended up computing the widths manually.
When the x-axis is a datetime you have to provide the widths in milliseconds so, assuming you have a pandas dataframe with a time column that you’re using as x axis, you can do something like this
fig.update_traces(
width=(data['time'].diff().dt.seconds * 850).fillna(method='bfill').values
)
Note that I multiply by 850 (and not 1000) to simulate a small gap between the bars.
This seems to work pretty well for most of the cases.
1 Like