Not really an answer to the question, but it took me quite long time until I figured out how to do the same with logscale. There are a bunch of strange behaviours in that case. Here's my code to apply some simple scaling to the original y axis:
def set_scaled_y_axis(ax, label1, label2, scale):
#define the minor and major ticks
#might give an error for too small or large exponents (e.g. 1e-20 or 1e+20)
log_ticks_major=[]
log_ticks_minor=[]
tick_labels=[]
for k in range(-15,16,1):
log_ticks_major.append(10**k)
tick_labels.append("10$^{"+f"{k}"+"}$")
for kk in range(2,10):
log_ticks_minor.append(kk*10**k)
log_ticks_major=np.array(log_ticks_major)
log_ticks_minor=np.array(log_ticks_minor)
#update the original label
ax.set_ylabel(label2)
# make a twin axis and set the position
# to make the same with x axis you need "ax.twiny()" instead
ax22 = ax.twinx()
ax22.yaxis.set_ticks_position("left")
ax22.yaxis.set_label_position("left")
ax22.spines["left"].set_position(("axes", -0.15))
# draw only the left y axis
ax22.xaxis.set_visible(False)
# set the log scale for the 2nd axis
ax22.set_yscale("log")
ax22.set_yticks(log_ticks_minor/scale, minor=True) # set minor ticks
ax22.set_yticks(log_ticks_major/scale) # set normal(/major?) ticks
ax22.set_yticklabels(tick_labels) #must be after "ax22.set_yticks(log_ticks_major/scale)"
ax22.tick_params('y', which="minor", labelleft=False) #some "random" minor tick labels would appear
# set the 2nd y axis label
ax22.set_ylabel(label1)
# set the limits of the 2nd y axis to be the same as the 1st one
ax22.set_ylim(ax.get_ylim())