In Python/Seaborn, there is the option to offset the x and y axis at the origin. This 'despine' pulls the x-axis down a bit, and the y-axis left, so that data that are close to either one become more visible. This function mimics the behaviour in a matlab plot, by changing the axis limits and covering the origin of the axes with a white line.
Anne Urai (2020). offsetAxes(ax) (https://www.mathworks.com/matlabcentral/fileexchange/52351-offsetaxes-ax), MATLAB Central File Exchange. Retrieved .
Hi Anne, your function is super helpful.
On a side note, I was having trouble with log scale when using this so I tried modifying your code to adapt that in, as well as with the option to modify the offset factor, as well as the option to include axes handle vectors/all axes in a given figure handle.
You need to add the solution for dealing with x- and y-minor ticks provided in the comment section from the stack overflow answer that inspired your function. However, note that the comment has an error. The error is in the statement that deals with the y-axis minor ticks. To address the error you need to adjust the row index used to remove the y-axis minor ticks from the value 1 to the value 2. The value 1 is correct for the x-axis minor ticks but not y-axis. Specifically, ax.YAxis.MinorTickChild.VertexData(:,ax.YAxis.MinorTickChild.VertexData(1,:)<0) =  needs to be changed to ax.YAxis.MinorTickChild.VertexData(:,ax.YAxis.MinorTickChild.VertexData(2,:)<0) = . Also, instead of <0 you could define a variable for the min xtick value and min ytick value and use those min values instead of 0 (i.e. within the function resetVertex)
Hi Anne, I was just looking into the possibility to integrate such functionality in gramm (I like the look!), and I convinced myself that there should be a cleaner way of doing this, without white lines/boxes. A trip to undocumentedmatlab and a few minutes later I found that in recent Matlab versions you can actually shorten axes lines by changing values in a.XRuler.Axle.VertexData and a.YRuler.Axle.VertexData. Additional hidden properties can be read with fieldnames(struct(a.YRuler.Axle))
Thanks to Pierre Morel and http://tinyurl.com/obtuh39, I updated the function to resize 'XRuler.Axle.VertexData' and 'YRuler.Axle.VertexData', and keeping this constant when resizing using a listener.
added a user-defined option to mask data outside range
Instead of only masking parts of the axes we don't wan't, also cover this part of the data with a white area (in case xdata or ydata extend beyond current axis limits). Optimized for 4x4 subplots. Added use of plotboxpos by Kelly Kearney
Added screenshot, slack values adjusted for 4x4 subplot