How to show FrameLabel and AxesLabel simultaneously with PlotTheme -> "Scientific"

I'm using mathematica 12.3. The function I need to plot is of order $$10^4$$, and I want to display a multiplier "$$\times 10^4$$" besides the $$y$$-axix while keeping FrameLabels $$x,y$$.

With following code

Plot[x^2, {x, 0, 3},
PlotTheme -> "Scientific",
FrameLabel -> {x, x^2},
AxesLabel -> {, MaTeX@"\\times10^4"}]


I get

, where the AxesLabel doesn't show the multiplier.

If I remove PlotTheme,

Plot[x^2, {x, 0, 3},
FrameLabel -> {x, x^2},
AxesLabel -> {, MaTeX@"\\times10^4"}]


I get

, where the FrameLabel doesn't show anymore.

How shall I make it through, as simply as possible? Thanks.

Working around.

Plot[x^2, {x, 0, 3}, PlotTheme -> "Scientific",
FrameLabel -> {x, x^2},
PlotLegends -> Placed[MaTeX@"\\times10^4", {Top, Left}]]


Plot[x^2, {x, 0, 3}, PlotTheme -> "Scientific",
FrameLabel -> {x, x^2},
PlotLegends -> Placed[MaTeX@"\\times10^4", {0.1, 1}]]


maybe like this

Plot[x^2, {x, 0, 3}, PlotTheme -> "Scientific",
FrameLabel -> (MaTeX[#, FontSize -> 20] &) /@ {"x",
"x^2 \\ \\times 10^4"}]


<< MaTeX

Plot[x^2
, {x, 0, 3}
, PlotTheme -> "Scientific"
, FrameLabel -> {
MaTeX@"x", RowBox[
{Spacer[90]
, MaTeX@"x^2"
, Spacer[70]
, Rotate[
MaTeX@"\\times10^4", -π/2]}] // DisplayForm
}
]


You can use AxisObject; an experimental function in 13.1.

I have made most features Transparent so only the AxisLabel remains. Also had to ImagePadding above the to make space for the label.

Plot[
x^2, {x, 0, 3}
, PlotTheme -> "Scientific"
, FrameLabel -> {x, x^2}
, ImagePadding -> {{Automatic, Automatic}, {Automatic, 20}}
, Prolog -> {
AxisObject[{"Vertical", -0.05}
, AxisStyle -> Transparent
, TicksStyle -> Transparent
, LabelStyle -> Opacity[1]
, AxisLabel ->
Placed[TraditionalForm["\[Times]\[MediumSpace]\!$$\*SuperscriptBox[\(10$$, $$4$$]\)"]
, Above
]
]
}]


Hope this helps.

• I'm using 12.3, so these codes don't seem to work in my PC, but thank you for the same. I'll try it after updating. Commented Oct 23, 2022 at 16:25

@cvgmt's answer is helpful, but actually in my case, my $$y$$-axis label is very long, and Placed command doesn't show at desired postion.

For example, with a very long label and position {0.1,1}, I get

, where the $$\times 10^4$$ is placed above the whole graph. If I set the position to be {0.1,0.9}, I get something like

As it turns out, the position is now relative to Frame, not the whole Graph.

I don't know what causes it, and it's no use to replace Scaled by ImageScaled or just {0.1,0.9}.

My Improvement

I found [Overlay] to place one graph above another. And following codes

Overlay[{
Plot[x^2, {x, 0, 3}, PlotTheme -> "Scientific",
ImagePadding -> {{Automatic, 20}, {Automatic, 20}},
FrameLabel -> {x, MaTeX@"\\text{A Very Very Very Very Very Long Label}"}],

Graphics[Inset[MaTeX@"\\times10^4",
ImageScaled@{0.18, 0.93}],
ImageSize -> Small]
}]


will give

, which performs well.

ImagePadding` is needed, otherwise $$\times10^4$$ will be cut off at the frame border.