How can I get my ListPlot to go from {x,-10,10} on x?

  • Context: Mathematica 
  • Thread starter Thread starter Freya
  • Start date Start date
Click For Summary
SUMMARY

The discussion focuses on adjusting the x-axis of a ListPlot in Mathematica to range from -10 to 10, corresponding to the variable 'n'. The user is attempting to plot results derived from recurrence equations involving energy calculations. The primary issue arises from the structure of the data being passed to ListPlot, which is not formatted correctly as pairs of coordinates. The solution involves ensuring the data is structured as {{x1,y1},{x2,y2},...} to achieve the desired plot range.

PREREQUISITES
  • Familiarity with Mathematica syntax and functions
  • Understanding of recurrence equations and energy calculations
  • Knowledge of ListPlot and data formatting in Mathematica
  • Basic grasp of plotting concepts and coordinate systems
NEXT STEPS
  • Learn how to format data for ListPlot in Mathematica
  • Explore the use of KroneckerDelta in recurrence relations
  • Investigate the structure of nested lists in Mathematica
  • Study examples of plotting with ListPlot to understand coordinate adjustments
USEFUL FOR

Mathematica users, physicists working with recurrence relations, and anyone interested in data visualization and plotting in computational environments.

Freya
Messages
15
Reaction score
1
I have some code that is basically taking a range of energies, putting them into some recurrence equations and solving, and then I want to plot the results.

Code:
\[HBar] = 1;
m = 1;

Do[Energy[z] = 0.5 + 5 z, {z, 0, 14}]
Table[Energy[z], {z, 0, 14}];
Do[Entot[n, o] = Energy[o] - \[HBar]*\[Omega]*n, {n, -10, 10}, {o, 0, 
  14}]
Do[k[n, o] = 2*m*(Entot[n, o])^(1/2), {n, -10, 10}, {o, 0, 14}]
\[Omega] = 1;
s = 10;
k0 = 10;
\[Alpha] = 10;
t0 = 1;
t[-11] = 0.01;
t[11] = 0.01;
r[-11] = 0.01;
r[11] = 0.01;
ClearAll[plot1]
Do[eqn[n, o] = -t[n] + 
    KroneckerDelta[n, 
     1] + (s*m/(2*\[HBar]^2*I*k[n, o]))*(t[n - 1] + 
       t[n + 1]), {n, -10, 10}, {o, 0, 14}];
tab1 = Table[eqn[n, o], {o, 0, 14}, {n, -10, 10}];
tab2 = Table[t[n], {n, -10, 10}];

Do[plot1[p] = NSolve[tab1[[p]] == 0, tab2], {p, 1, 15}]
Do[f[n, o] = t[n] /. plot1[o], {n, -10, 10}, {o, 1, 15}]
ListPlot[Abs[
  Table[Flatten[Table[f[n, o], {n, -10, 10}]], {o, 1, 15}]], 
 PlotRange -> {0, 1.5}, PlotLegends -> Automatic]

At the moment, the ListPlot at the bottom takes the index of the list, so it goes from 0 to 21. But really, this should go from -10 to 10, following the iteration of n. I have tried everything it seems, from making my table go like [{n,f[n,o]},{n,-10,10}] but this doesn't work. I've tried making a separate list of n's and then transpose this with the f's, but as f is going over o as well, I think the length discontinuity is causing issues.

Any help would be much appreciated, and apologies if my code's a mess, I'm very much a rookie.

Thanks!
 
Physics news on Phys.org
Can you create list pairs? The examples I saw of listplot adjusted the x-axis when list pairs were used.
 
jedishrfu said:
Can you create list pairs? The examples I saw of listplot adjusted the x-axis when list pairs were used.
Thanks for your reply!

I tried that but due to my list being effectively a list with 21 elements, with 15 in each element, it can't be done simply it seems, I think I need some tricky syntax
 
Freya said:
I have tried everything it seems, from making my table go like [{n,f[n,o]},{n,-10,10}]
This is the right way to do it. What error did you get when you tried this?

Try just one fixed value of o first.
 
Dale said:
This is the right way to do it. What error did you get when you tried this?

Try just one fixed value of o first.
It doesn't get an error per say, but the graph it spits out is wrong, if I look at just one o I get a 2 sets of data plotted (or so it seems) one that's a straight line going from -10 to 10 in y (no idea why) and then roughly the right shape of the graph for f, but x now goes from 0 to 42.
 
List pairs are:

(-3,9), (-2,4), (-1,1),(0,0), (1,1),(2,4),(3,9)...

ListPlot will then adjust the X-axis to match the axes to range of x values and the range of y values which in this case is
x: -3 to 3 and y:0 to 9
 
jedishrfu said:
List pairs are:

(-3,9), (-2,4), (-1,1),(0,0), (1,1),(2,4),(3,9)...

ListPlot will then adjust the X-axis to match the axes to range of x values and the range of y values which in this case is
x: -3 to 3 and y:0 to 9
I've been trying to do this but I think the issue is my code isn't quite {x1,y1},{x2,y2} etc, I have several values for each x
 
Freya said:
It doesn't get an error per say, but the graph it spits out is wrong, if I look at just one o I get a 2 sets of data plotted (or so it seems) one that's a straight line going from -10 to 10 in y (no idea why) and then roughly the right shape of the graph for f, but x now goes from 0 to 42.
That sounds like your list has been transposed. So instead of {{x1,y1},{x2,y2},...} your list goes {{x1,x2,...},{y1,y2,...}}.
 
  • #10
Dale said:
That sounds like your list has been transposed. So instead of {{x1,y1},{x2,y2},...} your list goes {{x1,x2,...},{y1,y2,...}}.
I may be wrong, but I don't think that's my problem, I think it may be further back in my code as when I print values of f, they are already in a list, I'll play around and see what I can find
 
  • #11
It is easy enough to check. Just make a new variable and set it equal to the value sent to ListPlot. I bet it isn't shaped right.
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
Replies
5
Views
8K
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
Replies
2
Views
2K
  • · Replies 61 ·
3
Replies
61
Views
10K