Re: [Tutor] plotting several datasets and calling data from afar
See below, but not all the way. Interspersed in the code. > >I am trying to set up a code to do some plotting and before I get too > > far I wanted to ask some structure questions. Basically I want to tell > > python to read 2 datasets, plot them on the same scale on the same x-y axis > > , read a third dataset and match the name from the first dataset, then > > label certain values from the third... complicating matters is that all > > these data are part of much, much larger sets in seperate files, the paths > > look like: > > pathway1/namered.dat > > pathway2/nameblue.dat > > matchingfile.txt > > > > so I do fopen on the matchingfile, read it with asciitable, and then I have > > a column in that file called 'name' and a column called 'M', I sort the > > file, return a subset that is interesting, and get name1, name2, etc for > > every subset. I want to make a plot that looks like: > > > > plot pathway1/namered.dat and pathway2/nameblue.dat with label 'M' for > > every value in the subset name1, each row[i] I need to assign to a seperate > > window so that I get a multiplot with a shared x-axis, and stacking my > > plots up the y-axis. I do have multiplot working and I know how to plot > > 'M' for each subset. > > > > The conceptual trouble has come in, how do I match 'name' variable of my > > subset 'name1' with the plot I want to do for pathway1/namered.dat and > > pathway2/nameblue.dat... the key feature that is the same is the 'name' > > variable, but in one instance I have to match the 'name'+'red.dat' and in > > the other the 'name'+'blue.dat' > > It's not 100% clear to me what you precisely want to do, but here are a few > possibilites: > > - use a dictionary. Assign each dataset to a dictionary with the name as the > key (or the name + color). Eg, dataset['name1red'], dataset['name1blue'], > dataset['name2red'] etc. Each value in this dictionary is a dataset read by > asciitable. > the (big) disadvantage is that you would read every single *.dat file > beforehand >The dictionaries look a bit like the right idea, but in the end I was able > to manipulate my input table so they aren't quite necessary. The code I have > now, which partially works, is as follows: > > #!/usr/bin/python > > #File from Read_All > x=open('LowZ_joinAll') > > dat=asciitable.read(x,Reader=asciitable.NoHeader, > fill_values=['--','-999.99']) > #gives dat file where filenames are first two columns > > ### > bluefilename1=dat['col1'] > filename1=dat['col2'] > > #other stuff I need > > #Ra/Dec in decimal radians > Radeg1=dat[ 'col6']*180./math.pi #ra-drad > Decdeg1=dat['col7']*180./math.pi#dec-drad > Vmag=dat['col8'] > Mag=dat['col15'] > EW1=dat['col16'] > EW2=dat['col17'] > EW3=dat['col18'] > #Horizontal Branch Estimate > VHB=18.0 > EWn = (0.5*abs(EW1)) + abs(EW2) + (0.6*abs(EW3)) > # NEED ABS VALUE FOR FORMULA > FEHn = -2.66 + 0.42*(EWn + 0.64*(Vmag - VHB)) > EW1_G=dat['col23'] > EW2_G=dat['col24'] > EW3_G=dat['col25'] > EWg = (0.5*abs(EW1_G)) + abs(EW2_G) + (0.6*abs(EW3_G)) > FEHg = -2.66 + 0.42*(EWg + 0.64*(Vmag - VHB)) > #use 0.15-0.2 dex as standard error -- R. Ibata > FEHerror=0.2 > #corrected velocity > Vhel=dat['col37'] > V_err=dat['col38'] > m_H=dat['col74'] > alpha_Fe=dat['col75'] > microturb=dat['col76'] > Vrot=dat['col77'] > Chisq=dat['col78'] > RVorig=dat['col79'] > RVcorr=dat['col80'] > Heliocentric_RV=RVorig+RVcorr > > #now if I want to make plots I have to access paths > > #example, trying with one element > path1r='../Core2dfdr-red-sorted/'+filename1[1] > path1b='../Core2dfdr-blue/'+bluefilename1[1] > > #and use a title in the plot > title1='Data Fe/Hn='+str(FEHn[1])+' Fe/Hg='+str(FEHg[1]) > > for i in xrange(len(Radeg1)): > if i<=5: > #subset1 > print 'filename= ',filename1[i],' ',bluefilename1[i],' FEHn= > ',FEHn[i],' FEHg= ',FEHg[i] > #multiplot1 > fig1, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(5, sharex=True) > ax1.plot(path1r,'--ro') > ax1.plot(path1b,'--bo') Here's where you go wrong. You're feeding plot() a path, not data. plot() just takes an x and y array of (float) values (and more options if wanted). Not like gnuplot for example, which can deal with a filename as input. This is also the ValueError you get below: plot() sees a string (the filename), which it tries to interpret as an array of y values (it assumes x is [0, 1, 2, …] if it's missing), and that fails as it tries to convert the string to floats. So, you'll first have to read the file, extract the data, then plot those data. pyfits is the module you want to use for reading your data. Hope that gets you further, Evert > plt.show() > #subset2 > #if i>5 and i<=10: > #print 'filename= ',filename1[i],' FEHn= ',FEHn[i],' FEHg= ',FEHg[i] > > . > this is where it breaks down. >
Re: [Tutor] (no subject)
On Tue, Mar 27, 2012 at 6:38 AM, thao nguyen wrote: > Dear Support Team, > > I have built a function (enclosed here) to merge many files (in this example > is 2 files: "a1.txt" and "a2.txt") lines by lines. The output file is called > "final_file". However, i could not have it run successfully. > > Content of "a1.txt": > 1 > 3 > 5 > > > Content of "a2.txt": > 2 > 4 > 6 > > > Content of "final_file.txt" will be like: > 1 > 2 > 3 > 4 > 5 > 6 > > > In Python, i called just written module: > > import argument > reload(argument) > argument.test(2,"C:/a1.txt","C:/a2.txt") > > and get the error as below: > "ValueError: I/O operation on closed file > File "c:\append.py", line 5, in > argument.test(2,"C:/a1.txt","C:/a2.txt") > File "c:\argument.py", line 28, in test > for line_data in f:" > > Could you please advise the resolution for this? > To start with, the error mentions the argument.py file, so you should post that file as well. You don't need to use the reload function in append.py. Is there a reason why it is being called? -- regards, kushal ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] (no subject)
On 2012/03/27 03:08 AM, thao nguyen wrote: Dear Support Team, I have built a function (enclosed here) to merge many files (in this example is 2 files: "a1.txt" and "a2.txt") lines by lines. The output file is called "final_file". However, i could not have it run successfully. Content of "a1.txt": 1 3 5 Content of "a2.txt": 2 4 6 Content of "final_file.txt" will be like: 1 2 3 4 5 6 In Python, i called just written module: import argument reload(argument) argument.test(2,"C:/a1.txt","C:/a2.txt") and get the error as below: "ValueError: I/O operation on closed file File "c:\append.py", line 5, in argument.test(2,"C:/a1.txt","C:/a2.txt") File "c:\argument.py", line 28, in test for line_data in f:" Could you please advise the resolution for this? Thank you ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor Your Exception states what the problem is, which is operating on a closed file, and your traceback indicates it is when you're iterating over it. As the error occurs in your argument.py file, you should post the relevant portions of that code too. You could also do `cat file1 file2 filen > final_file` in a *nix prompt if that is your use-case. -- Christian Witts Python Developer // ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Permissions Error
On 27/03/2012 05:00, Michael Lewis wrote: Traceback (most recent call last): File "C:\Python27\Utilities\copyfiles.py", line 47, in copyfiles(srcdir, dstdir) File "C:\Python27\Utilities\copyfiles.py", line 42, in copyfiles shutil.copy(srcfile, dstfile) File "C:\Python27\lib\shutil.py", line 116, in copy copyfile(src, dst) File "C:\Python27\lib\shutil.py", line 81, in copyfile with open(src, 'rb') as fsrc: IOError: [Errno 13] Permission denied: 'C:\\Users\\Chief Ninja\\Pictures\\testdir' It's not 100% clear what's going on, but it looks as though you've passed along paths whicih result in shutil trying to open a *directory* for reading -- which it won't be able to do. (It is, in fact, possible to get a file handle to a directory on Windows but you don't want to do that and shutil doesn't know how). I've noticed that the code runs if I use shutil.copyfiles instead of shutil.copy. Do you know why? Assuming my premise above, it would be because it special-cases directories passed as parameter. (I haven't actually looked at the code to check). With this kind of problem the most helpful thing you can do for yourself -- and for us if you can't resolve it yourself -- is to pull yourself out of the depths of your copy/copyfiles architecture and to try to do a simple: open ("c:/path/to/file.txt", "rb") If that succeeds then obviuosly there's no permissions issue as such. If it fails (with an access error) then we're onto something. If it succeeds then, probably your more complex copyfiles code is doing something you don't think it's doing. Start chucking out print () statements or logging or something so you know *exactly* where the paths are pointing to which you're passing into the shutil or other stdlib functions. Hopefully all this will make it clearer what's going on. Full marks for posting your code -- that does help. But you'll do better if you post a *minimal* code example, and preferably a self-complete one. TJG ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] I/O operation on closed file?
in addition to posting the relevant code: please in future use a meaningful subject which I have provided this time. remember to reply-all so a copy goes to the list. On 3/26/2012 9:08 PM, thao nguyen wrote: Dear Support Team, I have built a function (enclosed here) to merge many files (in this example is 2 files: "a1.txt" and "a2.txt") lines by lines. The output file is called "final_file". However, i could not have it run successfully. Content of "a1.txt": 1 3 5 Content of "a2.txt": 2 4 6 Content of "final_file.txt" will be like: 1 2 3 4 5 6 In Python, i called just written module: import argument reload(argument) argument.test(2,"C:/a1.txt","C:/a2.txt") and get the error as below: "ValueError: I/O operation on closed file File "c:\append.py", line 5, in argument.test(2,"C:/a1.txt","C:/a2.txt") File "c:\argument.py", line 28, in test for line_data in f:" Could you please advise the resolution for this? What does " I/O operation on closed file" suggest to you? -- Bob Gailer 919-636-4239 Chapel Hill NC ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor