# How can I write the frame ticks in Scientific Form?

Is there any way to remove the decimal places in the frame ticks. I would like to make the y axis ticks integers. I use the following code. My only problem is how to manipulate the y axis without decimal numbers.

FrameTicks -> {{1, 2, 3}, {#, 1/9.11 10^31 #} & /@
FindDivisions[{-2*10^-28, -2*10^-32, 3*10^-30}, 8], None, None}


I would prefer to write the Frame ticks in terms of 10^-n for the decimal numbers. This is the code, I just copied :

deltae[\[HBar]_, n_, mc_, mx_,
a_, \[Eta]_] = (\[Pi]^2 \[HBar]^2 n^2)/(
2 mc a^2) - (\[Pi]^2 \[HBar]^2 n^2)/(2 mx a^2) + \[Eta];

x[\[HBar]_, n_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_] =
1/2 (1 + deltae[\[HBar], n, mc, mx, a, \[Eta]]/Sqrt[
deltae[\[HBar], n, mc, mx, a, \[Eta]]^2 + \[CapitalOmega]^2]);

c[\[HBar]_, n_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_] =
1/2 (1 - deltae[\[HBar], n, mc, mx, a, \[Eta]]/Sqrt[
deltae[\[HBar], n, mc, mx, a, \[Eta]]^2 + \[CapitalOmega]^2]);

ex[\[HBar]_, n_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_] =
Abs[x[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]]^2;

ca[\[HBar]_, n_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_] =
Abs[c[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]]^2;

mpol[\[HBar]_, n_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_] = (
mc*mx)/(ca[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]*mx +
mc*ex[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]);

e[\[HBar]_, n_, mc_, mx_,
a_, \[CapitalOmega]_, \[Eta]_] = (\[Pi]^2 \[HBar]^2 n^2)/(
2 mpol[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]] *a^2);

\[Kappa][\[HBar]_, n_, v_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_] =
Sqrt[(2 mpol[\[HBar], n, mc, mx,
a, \[CapitalOmega], \[Eta]] (v -
e[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]))/\[HBar]^2];

t[\[HBar]_, v_, n_, mc_, mx_,
a_, \[CapitalOmega]_, \[Eta]_] = (4 e[\[HBar], n, mc, mx,
a, \[CapitalOmega], \[Eta]]*(v -
e[\[HBar], n, mc, mx,
a, \[CapitalOmega], \[Eta]]))/(4 e[\[HBar], n, mc, mx,
a, \[CapitalOmega], \[Eta]]*(v -
e[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]) +
v^2 Sinh[
Sqrt[(2 mpol[\[HBar], n, mc, mx,
a, \[CapitalOmega], \[Eta]] (v -
e[\[HBar], n, mc, mx,
a, \[CapitalOmega], \[Eta]]))/\[HBar]^2] a]^2);

energy[\[HBar]_, v_, n_, mc_, mx_, a_, \[CapitalOmega]_, \[Eta]_,
k_] = 2 t[\[HBar], v, n, mc, mx, a, \[CapitalOmega], \[Eta]]*
e[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]*(1 - Cos[k*a]);

effectivemass[\[HBar]_, v_, n_, mc_, mx_,
a_, \[CapitalOmega]_, \[Eta]_,
k_] = \[HBar]^2 D[
energy[\[HBar], v, n, mc, mx, a, \[CapitalOmega], \[Eta], k], {k,
2}]^(-1);

em[\[HBar]_, v_, n_, mc_, mx_,
a_, \[CapitalOmega]_, \[Eta]_] = \[HBar]^2/(
8 t[\[HBar], v, n, mc, mx, a, \[CapitalOmega], \[Eta]]*
e[\[HBar], n, mc, mx, a, \[CapitalOmega], \[Eta]]*a^2);

m = 9.11*10^-31;
v = 0.5*10^-3*1.6*10^-19;
v0 = v;
a = 3*10^-6;
\[HBar] = 1.054*10^-34;
\[Tau]x = 6*10^-9;
\[Tau]c = 30*10^-12;
mc = 5*10^-5*m;
mx = 0.1 m;
w0 = 1*10^5;
nr = 3.6*10^3;
\[Eta] = 10^-3*1.6*10^-19;
\[CapitalOmega] = 15*10^-3*1.6*10^-19;

trimPoint[n_, digits_] :=
NumberForm[n, digits,
NumberFormat -> (DisplayForm@
RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]}, If[#3 != "", {"\[Times]", SuperscriptBox[#2, #3]}, {}]]] &)]; GraphicsPlotMarkers[]; p1 = ListPlot[ Table[em[\[HBar], v, n, mc, mx, a, \[CapitalOmega], \[Eta] ], {n, 1, 3, 1}], AxesOrigin -> {1, 0}, PlotMarkers -> {Style["\[FilledSquare]", Blue, FontSize -> 14]}, PlotStyle -> {Blue, Thickness[0.008]}, PlotRange -> All, FrameLabel -> {"\!$$\* StyleBox[\"n\", \"Text\",\nFontSize->16]$$", "\!$$\* StyleBox[SuperscriptBox[ StyleBox[\"m\", \"Text\",\nFontSize->16], \"*\"], \"Text\",\n\ FontSize->16]$$\!$$\* StyleBox[\"/\", \"Text\",\nFontSize->16]$$\!$$\* StyleBox[SubscriptBox[\"m\", \"e\"], \"Text\",\nFontSize->16]$$"}, Frame -> True, BaseStyle -> {FontFamily -> "Helvetica", FontSize -> 24}, FrameStyle -> {Directive[Thickness[0.002], 14], Directive[Thickness[0.002], 14]}, FrameTicks -> {{1, 2, 3}, {#, trimPoint[1/9.11 10^31 #, 1]} & /@ FindDivisions[{1.4*10^-32, 0.01*10^-35, 1.4*10^-34}, 6], Automatic, Automatic}]  I tryed this one according to the comment by george2079 but would prefer if it is in scientific form like 0.5x10^-2. FrameTicks -> {{1, 2, 3}, (# {scale, 1}) & /@ FindDivisions[{1.4*10^-32/scale, 1.4*10^-35/scale}, 6], None, None}]  • Duplicate?: (5369) Sep 22, 2015 at 12:56 • @ Mr.Wizard, a bit different, the power is outside of the axes. Sep 22, 2015 at 13:25 • Oh, so instead of e.g. 10^0, 10^-1, 10^-2 you would just have 0, -1, -2 and add a frame label? That should be an easy modification. Sep 22, 2015 at 14:00 • @ Mr.Wizard, my aim was to write the y axes in terms of the mass of the free electron in scientific form. Sep 22, 2015 at 14:10 ## 3 Answers Here is a function that does what you want, I think: trimPoint[n_, digits_] := (*display number n with given number of sig.digits, trim trailing decimal point*) NumberForm[n, digits, NumberFormat -> (DisplayForm@ RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]},
If[#3 != "", {"\[Times]", SuperscriptBox[#2, #3]}, {}]]] &)]

FrameTicks -> {{1, 2, 3}, {#, trimPoint[1/9.11 10^31 #, 3]} & /@
FindDivisions[{-2*10^-28, -2*10^-32, 3*10^-30}, 8], None, None}


I copied it from this long answer where it's kind of hidden.

The second argument of trimPoints is the number of significant digits. Instead of displaying trailing decimal points as in 1., you get 1 without the point.

• Thank you so much for the quick and sharp answer as always! This is exactly what I want. Jul 31, 2015 at 17:27
• Looking back at the question, it occurred to me that you may just be looking for Round instead of trimPoint. The difference is that trimPoint allows a certain number of significant digits including before and after the decimal point. This is why in the above example only the larger numbers are turned into integers. Round outputs integers for all ticks.
– Jens
Jul 31, 2015 at 17:41
• I would like the Frame ticks like 2x10^-2 instead of 0.02 in your previous answer. Sep 21, 2015 at 12:43
• @DavidH I don't understand why you edited my answer but still didn't accept it. Also, you added a plot without explanation, not showing the code to produce it. Unless you explain why you did that, I'll probably revert to my original answer because the current form is confusing.
– Jens
Sep 21, 2015 at 18:22
• I removed the edit because I don't like to have non-working code in my answers.
– Jens
Sep 21, 2015 at 18:29

You could let FindDivisions do the work:

scale  = (9.11/10^31)
FrameTicks -> {{1, 2, 3}, ( # { scale , 1}) & /@
FindDivisions[{-2*10^-28 /scale, -2*10^-32 /scale}, 8], None, None}


FrameTicks -> {{1, 2, 3}, {{-2.2775*10^-28, -250}, {-1.822*10^-28, -200}, {-1.3665*10^-28, -150}, {-9.11*10^-29, -100}, {-4.555*10^-29, -50}, {0., 0}}, None, None}

or this if you actually want the odd increments:

FrameTicks -> {{1, 2, 3}, ( # { scale , 1}) & /@
FindDivisions[{-2*10^-28 /scale, -2*10^-32 /scale, 33}, 8], None,
None}


FrameTicks -> {{1, 2, 3}, {{-2.10441*10^-28, -231}, {-1.80378*10^-28, -198}, {-1.50315*10^-28, -165}, {-1.20252*10^-28, -132}, {-9.0189*10^-29, -99}, {-6.0126*10^-29, -66}, {-3.0063*10^-29, -33}, {0., 0}}, None, None}

• would it be possible to write in 10^-n instead of decimal numbers? Sep 21, 2015 at 14:45

Here is my answer to my question.

p1 = ListPlot[
Table[em[\[HBar], v, n, mc, mx, a, \[CapitalOmega], \[Eta] ] 1/
9.11 10^33, {n, 1, 3, 1}], AxesOrigin -> {1, 0}, PlotRange -> All,
Frame -> True,
PlotMarkers -> {Style["\[FilledSquare]", Blue, FontSize -> 14]},
PlotStyle -> {Blue, Thickness[0.008]}, PlotRange -> All,
BaseStyle -> {FontFamily -> "Helvetica", FontSize -> 24},
FrameStyle -> {Directive[Thickness[0.002], 14],
Directive[Thickness[0.002], 14]}, FrameLabel -> {"\!$$\* StyleBox[\"n\", \"Text\",\nFontSize->16]$$", "(\!$$\* StyleBox[SuperscriptBox[ StyleBox[\"m\", \"Text\",\nFontSize->16], \"*\"], \"Text\",\n\ FontSize->16]$$\!$$\* StyleBox[ StyleBox[\"/\", \"Text\",\nFontSize->16], \"Text\",\n\ FontSize->16]$$\!$$\* StyleBox[SubscriptBox[\"m\", \"e\"], \"Text\",\nFontSize->16]$$\!$$\* StyleBox[\")\", \"Text\",\nFontSize->16]$$\!$$\* StyleBox[\"\[Times]\",\nFontSize->16]$$\!$$\* StyleBox[SuperscriptBox[\"10\", RowBox[{\"-\", \"2\"}]], \"Text\",\nFontSize->16]$$"},
FrameTicks -> {{1, 2, 3}, Automatic, Automatic, Automatic}]
`