[Tutor] Reading in large .dat file

Colin Ross colin.ross.dal at gmail.com
Wed Jun 29 15:26:43 EDT 2016


On Wed, Jun 29, 2016 at 4:21 PM, Peter Otten <__peter__ at web.de> wrote:

> Colin Ross wrote:
>
> > On Wed, Jun 29, 2016 at 2:41 PM, Peter Otten <__peter__ at web.de> wrote:
> >
> >> Colin Ross wrote:
> >>
> >> > Good afternoon,
> >> >
> >> > I have a .dat file that is 214 rows by 65 columns that I would like to
> >> > read into python and plot the 1st column versus all other columns.
> >> >
> >> > My code:
> >> >
> >> >
> #########################################################################
> >> >
> >> > import numpy as np
> >> > import scipy
> >> > import pylab as pl
> >> > import matplotlib
> >> > from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
> >> > import sys
> >> >
> >> > # Load in text from .dat file
> >> >
> >> > sed = np.loadtxt('spectra.dat', unpack = True)
> >>
> >> for flux in sed:
> >>     pl.plot(wavelength, flux)
> >>
> >> > pl.xscale('log')
> >> >
> >> > pl.show()
> >> >
> >> >
> #########################################################################
> >> >
> >> > This is fine if I want to write out a separate line for each of the 65
> >> > columns, but I would like to simplify the code by looping over the
> >> > data. Can someone please help me formatting the loop correctly?
> >>
> >
> > Thank you for the fast response! I have tried this and it outputs the
> > attached image.
>
> This is a text-only mailing list, so the image didn't make it through.
>
> > It seems to only plot 1 curve, when I would have expected
> > 64?
>
> You probably got a traceback (error information on the commandline). It is
> always a good idea to include that. Example:
>
> $ python3 flux2.py
> Traceback (most recent call last):
>   File "flux2.py", line 15, in <module>
>     pl.plot(wavelength,flux)
> NameError: name 'wavelength' is not defined
>
> The error indicates that there is no variable called wavelength. That's
> because I didn't note that you use the first column to define that, sorry.
> Here's a modified script that should work:
>
> import numpy as np
> import pylab as pl
>
> sed = np.loadtxt('spectra.dat', unpack=True)
>
> wavelength = sed[0]
> for flux in sed[1:]:
>     pl.plot(wavelength, flux)
>
> pl.xscale('log')
> pl.show()
>
> The for loop now skips the first column.
>

Ah yes, this works perfect now. I had added the wavelength = sed[0], but
forgot to skip it in the loop!

Thank you!


>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list