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

  • Thread starter Thread starter Freya
  • Start date Start date
Click For Summary
The discussion focuses on how to adjust the x-axis of a ListPlot in Mathematica to range from -10 to 10, in line with the variable n. The user is attempting to plot results from recurrence equations but is encountering issues with the data structure, resulting in incorrect x-axis values. Suggestions include creating list pairs in the format {{x1, y1}, {x2, y2}} to ensure proper axis alignment. The user is advised to troubleshoot the data structure and verify that it is not transposed, which could lead to plotting errors. Overall, the conversation emphasizes the importance of correctly formatting data for effective plotting in Mathematica.
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