Skip to main content

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



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




Comments

Popular posts from this blog

functions - Get leading series expansion term?

Given a function f[x] , I would like to have a function leadingSeries that returns just the leading term in the series around x=0 . For example: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)] x and leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)] -(1/(16 x^3)) Is there such a function in Mathematica? Or maybe one can implement it efficiently? EDIT I finally went with the following implementation, based on Carl Woll 's answer: lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal) The advantage is, that this one also properly works with functions whose leading term is a constant: lds[Exp[x],x] 1 Answer Update 1 Updated to eliminate SeriesData and to not return additional terms Perhaps you could use: leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]] Then for your examples: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x] leadingSeries[Exp[x], x] leadingSeries[(1/x + 2 + (1 - 1/x...

mathematical optimization - Minimizing using indices, error: Part::pkspec1: The expression cannot be used as a part specification

I want to use Minimize where the variables to minimize are indices pointing into an array. Here a MWE that hopefully shows what my problem is. vars = u@# & /@ Range[3]; cons = Flatten@ { Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; Minimize[{Total@((vec1[[#]] - vec2[[u[#]]])^2 & /@ Range[1, 3]), cons}, vars, Integers] The error I get: Part::pkspec1: The expression u[1] cannot be used as a part specification. >> Answer Ok, it seems that one can get around Mathematica trying to evaluate vec2[[u[1]]] too early by using the function Indexed[vec2,u[1]] . The working MWE would then look like the following: vars = u@# & /@ Range[3]; cons = Flatten@{ Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; NMinimize[ {Total@((vec1[[#]] - Indexed[vec2, u[#]])^2 & /@ R...

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]