1

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

user0322
  • 425
  • 2
  • 14

3 Answers3

4

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.

Jens
  • 97,245
  • 7
  • 213
  • 499
  • Thank you so much for the quick and sharp answer as always! This is exactly what I want. – user0322 Jul 31 '15 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 '15 at 17:41
  • I would like the Frame ticks like 2x10^-2 instead of 0.02 in your previous answer. – user0322 Sep 21 '15 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 '15 at 18:22
  • I removed the edit because I don't like to have non-working code in my answers. – Jens Sep 21 '15 at 18:29
  • It was a mistake! I try to make my question clear & the code is too big. – user0322 Sep 21 '15 at 18:35
  • I just added the code to make it clear. – user0322 Sep 21 '15 at 18:47
2

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}

george2079
  • 38,913
  • 1
  • 43
  • 110
0

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

user0322
  • 425
  • 2
  • 14