It looks like the y-axis limits do not match between both of the axes.
The only reason you're using two axes, as far as I can see, is to have two sets of x-tick-labels. Have you considered using just 1 x-y-axis and using text() or annotation() to label the upper x-tick labels? Or even easier, using two layers of x-tick labels at the bottom (see example)? If you prefer using two axes, there's a safer way to do it. After setting up the first axis you can copy it, along with its position, using copyobj. Then use linkprop to link the two axes' properties so if one changes, the other changes in the same way. You should link xtick, ytick, xlim, ylim, DataAspectRatio, position, innerPosition, xdir, ydir, and any other property that might change for one of the axes. Then, after you visually inspect that the axis ticks are perfectly aligned, you can turn off the upper axis (axis(h,'off')) and make it inaccessible (h.HandleVisibility='off'; h.HitTest='off'; h.PickableParts='none';).
Here are some examples,
Best Answer