They're not really log spaced differently.
Let's look at an example:
ydat = linspace(1,100,500);
semilogy(ydat)
ax = gca;
ax.YGrid = 'on';
ax.YMinorGrid = 'on';
What's happening is that they split each decade evenly, but the magnitude of the decade is changing:
for y=1:10
t = text(200,y,sprintf('%d',y));
t.FontSize = 6;
t.HorizontalAlignment = 'center';
t.VerticalAlignment = 'baseline';
end
for y=20:10:100
t = text(200,y,sprintf('%d',y));
t.FontSize = 6;
t.HorizontalAlignment = 'center';
t.VerticalAlignment = 'baseline';
end
That's MATLAB's default for log tick spacing, and it seems to be the most reasonable one for most situations. Especially when you have data which spans many decades.
However, it's not always what you want. Starting in R2015b, you can override that default and use whatever you'd like for the minor tick spacing.
You'd do that like this:
ax.YAxis.MinorTickValues = 1:100;
You can even use this to place the ticks at values that will be evenly spaced on the screen by giving them values which are scaled exponentially.
semilogy(ydat)
ax = gca;
ax.YGrid = 'on';
ax.YMinorGrid = 'on';
ax.YAxis.MinorTickValues = 10.^linspace(0,2,25);
for y=ax.YAxis.MinorTickValues
t = text(200,y,sprintf('%g',y));
t.FontSize = 6;
t.HorizontalAlignment = 'center';
t.VerticalAlignment = 'baseline';
end
Is one of those what you're looking for?