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]) - n2 * cos(data[i])) rhotang2 = (n1 * cos(data[i]) + n2 * cos(data[i])) rhotang = rhotang1 / rhotang2 data[i].append(rhotang) #append 4th value pprint(data) x = data[:] y1 = data[:] y3 = data[:] plot(x, y1, x, y3) show()
EDIT: http://paste.pocoo.org/show/205534/ But it doesn't work.
x = data[:] y1 = data[:] y3 = data[:]
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 for row in x]
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.