Bar to Scatter - xticks position issue

Hello

In my dash app, I have a toggle whose value determines whether the figure is a bar or a scatter plot.

The issues I have are

  1. the zero level moves up when the graph is refreshed from Bar to Scatter (line)
  2. the xlabels are expanded on the left and on the right side.

BarToScatterLine

I can’t figure out why, and I do not find zhe property in the doc. I tried “layout_individual[‘autosize’]=False”, “automargin=False”, but I can’t fixe the issue.

(Note: The hor. and vert. Cyan lines are just visual guides)

Does anyone has some clue ? Ideally, I would like the axis and the xtick labels dont move at all.

KR

David

problems partially fixed; I used [‘yaxis’][‘autorange’]=True and
[‘yaxis’][‘rangemode’]=‘tozero’.

Now both figures start at the same Y Zero-coordinates.

I still have to fix the last part of the problem : xaxis.

The behaviour I’m expecting from the xaxis when I click on the toggle is this:
BarDeltaToBarCumul

But, when I plot the cumulative with a scatter, it seems that the x axis is aligned “on the left”:
BarDeltaToScatterCumul

To fix this, Dash would need to understand that I want the tick at the exact position where they would be if I had plotted a go.Bar. But how can I do this ?

I was thinking about an offset, but the size of a bar depends on the size of the window and on the number of bars…This offset would therefore be relative. But again : how to ??

If the bar and the scatter plots are in the same figure, Dash automatically align everything “on the center”, like here : https://plot.ly/python/graphing-multiple-chart-types/

Question is: how to align “on the center” if the bar is not in the figure?

I think the easiest way to get dash to understand that you want the ticks at the exact position where they would be if you had plotted a go.Bar would be to add a go.Bar trace to your scatter plot. If you set marker opacity to 0 it won’t appear on your scatter plot.

i.e, add an extra trace that looks like this when you switch to the scatter display:

go.Bar(x=x, y=y, showlegend=False, marker=dict(opacity=0), hoverinfo='skip')

Thanks Michaelbabyn for the workaround, it works! :slight_smile: :grinning: