Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

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

  1. Apr 9, 2017 #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 (Text):

    \[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!
     
  2. jcsd
  3. Apr 9, 2017 #2

    jedishrfu

    Staff: Mentor

    Can you create list pairs? The examples I saw of listplot adjusted the x axis when list pairs were used.
     
  4. Apr 9, 2017 #3
    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
     
  5. Apr 9, 2017 #4

    Dale

    Staff: Mentor

    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.
     
  6. Apr 9, 2017 #5

    jedishrfu

    Staff: Mentor

  7. Apr 9, 2017 #6
    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.
     
  8. Apr 9, 2017 #7

    jedishrfu

    Staff: Mentor

    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
     
  9. Apr 9, 2017 #8
    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
     
  10. Apr 9, 2017 #9

    Dale

    Staff: Mentor

    That sounds like your list has been transposed. So instead of {{x1,y1},{x2,y2},...} your list goes {{x1,x2,...},{y1,y2,...}}.
     
  11. Apr 9, 2017 #10
    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
     
  12. Apr 9, 2017 #11

    Dale

    Staff: Mentor

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted