1
$\begingroup$

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]}, {}]]] &)];


Graphics`PlotMarkers[];

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}]

enter image description here

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}]

enter image description here

$\endgroup$
4
  • $\begingroup$ Duplicate?: (5369) $\endgroup$
    – Mr.Wizard
    Sep 22, 2015 at 12:56
  • $\begingroup$ @ Mr.Wizard, a bit different, the power is outside of the axes. $\endgroup$
    – user0322
    Sep 22, 2015 at 13:25
  • $\begingroup$ 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. $\endgroup$
    – Mr.Wizard
    Sep 22, 2015 at 14:00
  • $\begingroup$ @ Mr.Wizard, my aim was to write the y axes in terms of the mass of the free electron in scientific form. $\endgroup$
    – user0322
    Sep 22, 2015 at 14:10

3 Answers 3

4
$\begingroup$

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}

frameticks

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.

$\endgroup$
7
  • $\begingroup$ Thank you so much for the quick and sharp answer as always! This is exactly what I want. $\endgroup$
    – user0322
    Jul 31, 2015 at 17:27
  • $\begingroup$ 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. $\endgroup$
    – Jens
    Jul 31, 2015 at 17:41
  • $\begingroup$ I would like the Frame ticks like 2x10^-2 instead of 0.02 in your previous answer. $\endgroup$
    – user0322
    Sep 21, 2015 at 12:43
  • $\begingroup$ @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. $\endgroup$
    – Jens
    Sep 21, 2015 at 18:22
  • $\begingroup$ I removed the edit because I don't like to have non-working code in my answers. $\endgroup$
    – Jens
    Sep 21, 2015 at 18:29
2
$\begingroup$

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}

$\endgroup$
1
  • $\begingroup$ would it be possible to write in 10^-n instead of decimal numbers? $\endgroup$
    – user0322
    Sep 21, 2015 at 14:45
0
$\begingroup$

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}]

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.