0
$\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$
  • $\begingroup$ Duplicate?: (5369) $\endgroup$ – Mr.Wizard Sep 22 '15 at 12:56
  • $\begingroup$ @ Mr.Wizard, a bit different, the power is outside of the axes. $\endgroup$ – user0322 Sep 22 '15 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 '15 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 '15 at 14:10
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$
  • $\begingroup$ Thank you so much for the quick and sharp answer as always! This is exactly what I want. $\endgroup$ – user0322 Jul 31 '15 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 '15 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 '15 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 '15 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 '15 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$
  • $\begingroup$ would it be possible to write in 10^-n instead of decimal numbers? $\endgroup$ – user0322 Sep 21 '15 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, privacy policy and cookie policy

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