I found several topics about the undocumented ScaledTicks function and tried to use this. Here is the first example:
g1 = Plot[Sin[3 x] Exp[-x], {x, 0, 10}, PlotRange -> All];
g2 = Plot[Sin[3 x] Exp[1.1 x], {x, 0, 10}, PlotRange -> All];
{pr1, pr2} = (PlotRange[#][[2]] & /@ {g1, g2});
Show[{g1, g2 /. Line[x_] :>
Line[({#[[1]], Rescale[#[[2]], pr2, pr1]} &) /@ x]},
Axes -> False, Frame -> True,
FrameTicks -> {{Charting`ScaledTicks["Linear"],
Charting`ScaledTicks[{Rescale[#, pr2, pr1] &, Rescale[#, pr1, pr2] &}]},
{Charting`ScaledTicks["Linear"], Automatic}}]
This gives a mess of second y-axis ticks:
But if we use the "full" form of ScaledTicks:
Charting`ScaledTicks["Linear", {Rescale[#, pr2, pr1] &, Rescale[#, pr1, pr2] &}, "Nice"]
We see a very nice picture:
So, the first question: should we always use "full" form of ScaledTicks even if there is no transformation of coordinates?
The second example is about LogPlot and similar functions.
Show[{LogPlot[x, {x, 1, 100}], Plot[x Log[100]/100, {x, 1, 100}]},
Axes -> False, Frame -> True,
FrameTicks -> {{Charting`ScaledTicks["Log"],
Charting`ScaledTicks["Linear", {#/100 Log[100] &, # 100/Log[100] &},
"Nice"]}, {Automatic, Automatic}}]
and the result:
Here, I make all rescaling "by hand" for this simple case. If we change ScaledTicks to its "short" form
Charting`ScaledTicks[{#/100 Log[100] &, # 100/Log[100] &}]
The picture will be the same. So, in this example, the "short" and "full" forms of ScaledTicks are equivalent. How can we explain the difference between examples?
And the final observation. Any change from the simplest form ScaledTicks["Log"] gives errors, i.e. we can't write even ScaledTicks["Log",{#&, #&}, "Nice"].



TicksLengthoption to set the major and minor tick lengths using some syntax from an answer you updated recently using this function. $\endgroup$