3

I want to plot some data. The first column contains the x-data. But matplotlib doesn't plot this. Where is my mistake?

import numpy as np
from numpy import cos
from scipy import *
from pylab import plot, show, ylim, yticks
from matplotlib import *
from pprint import pprint

n1 = 1.0
n2 = 1.5

#alpha, beta, intensity
data = [
    [10,    22,     4.3],
    [20,    42,     4.2],
    [30,    62,     3.6],
    [40,    83,     1.3],
    [45,    102,    2.8],
    [50,    123,    3.0],
    [60,    143,    3.2],
    [70,    163,    3.8],
    ]

for i in range(len(data)):
    rhotang1 = (n1 * cos(data[i][0]) - n2 * cos(data[i][1]))
    rhotang2 = (n1 * cos(data[i][0]) + n2 * cos(data[i][1]))
    rhotang = rhotang1 / rhotang2
    data[i].append(rhotang) #append 4th value

pprint(data)
x = data[:][0]
y1 = data[:][2]
y3 = data[:][3]
plot(x, y1, x, y3)
show()

EDIT: http://paste.pocoo.org/show/205534/ But it doesn't work.

3 Answers 3

5

You can do this by converting data to a numpy array:

data = np.array(data) # insert this new line after your appends

pprint(data)
x = data[:,0]    # use the multidimensional slicing notation
y1 = data[:,2]
y3 = data[:,3]
plot(x, y1, x, y3)

A few additional points:

You can do the calculation in a more clear and vectorized way using numpy, like this

data = np.array(data)
rhotang1 = n1*cos(data[:,0]) - n2*cos(data[:,1])
rhotang2 = n1*cos(data[:,0]) + n2*cos(data[:,1])
y3 = rhotang1 / rhotang2

As you wrote it, your calculation may not give what you want since cos etc take radians as their inputs and your numbers look like degrees.

Sign up to request clarification or add additional context in comments.

Comments

2
x = data[:][0]
y1 = data[:][2]
y3 = data[:][3]

These lines don't do what you think.

First they take a slice of the array which is the whole array (that is, just a copy), then they pull out the 0th, 2nd or 3rd ROW from that array, not column.

You could try

x = [row[0] for row in x]

etc.

Comments

0

Try this:

#fresnel formula

import numpy as np
from numpy import cos
from scipy import *
from pylab import plot, show, ylim, yticks
from matplotlib import *
from pprint import pprint

n1 = 1.0
n2 = 1.5

#alpha, beta, intensity
data = np.array([
    [10,    22,     4.3],
    [20,    42,     4.2],
    [30,    62,     3.6],
    [40,    83,     1.3],
    [45,    102,    2.8],
    [50,    123,    3.0],
    [60,    143,    3.2],
    [70,    163,    3.8],
    ])

# Populate arrays
x = np.array([row[0] for row in data])
y1 = np.array([row[1] for row in data])
rhotang1 = n1*cos(data[:,0]) - n2*cos(data[:,1])
rhotang2 = n1*cos(data[:,0]) + n2*cos(data[:,1])
y3 = rhotang1 / rhotang2

plot(x, y1, 'r--', x, y3, 'g--')
show()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.