Discussion:
[Matplotlib-users] Plotting from a data file
Kevin Parks
2015-08-14 16:30:20 UTC
Permalink
I am a very lost gnuplot.py refugee. I hung in there as long as I could but sadly, gnuplotpy does not run on my machine so I managed, somehow to install new pythons, matplotlib, numpy, etc. and am up and running. Actually now trying out Canopy, which was even easier than running from the shell on OS X.

I am trying to plot some data by looking through the examples, finding something close to what I need and modifying it to work for the data I want to plot but I am lost and overwhelmed. Any pointers at all would be greatly appreciated. What I want to do surely is easy but I am really new at this and have been away from python a long time. I am reading the docs as fast as I can.

The task at hand:

I have 4 lines that I want to plot on top of each other (different colors) and the data, rather than being generated with an algorithm in python would be read in from a file.

A plot that looks close is #5 from plotfile_demo.py (seen here: Loading Image... <http://matplotlib.org/mpl_examples/pylab_examples/plotfile_demo_04.png>)

but that is confusing as it seems to open some file that I can’t seem to find in my install called 'msft.csv' and I am not sure the way it is doing the plot is all that customizable as the code for it is tiny and the routine it calls seems to do a lot of formatting automatically.

The easiest way to explain what need to do is to give a simplified task that is analogous, such as plot 4 individual simultaneous lines to show how they overlap and intersect and also their global motion, much like showing, say, the movement and relationship of distinct musical lines in an 4 voice choir(SATB) piece (that isn’t what I am doing but it is darned close).

In short I want to have a data file that has:

event_start_time, event_duration, frequency_value(for now midi will do), voice (perhaps specified with a number like: 1=soprano, 2=alto, 3=tenor, 4=bass each voice in a different color)

So the data would like so (quick & totally random at the moment):

0.0, 2.5, 60, 1
2.0, 1.5, 62, 4
4.0, 5.0, 64, 2
6.0, 3.5, 65, 3
8.0, 1.5, 67, 1
10.0, 2.0, 69, 4
12.0, 5.5, 71, 3
14.0, 3.0, 70, 2
16.0, 2.0, 72, 1
18.0, 1.0, 74, 4
20.0, 0.5, 75, 3
22.0, 1.5, 77, 2
24.0, 0.5, 79, 1

The legend just like in the above example and the x axis would be time and y axis frequency. Then I would have to figure out tic values and all that. I have been away from the whole world of python for a long while but I used to do this with great easy and flexibility in gnuplot.py even if the graphs did not look as lovely as these matlabplotlib ones do but this package is really new to me and I am somewhat overwhelmed by the enormity of matlabplotlib. Very sorry for such a newbie query but I feel like if i could get this going I would at least know which aspects of the package I need to read up on.
Kevin Parks
2015-08-14 17:05:33 UTC
Permalink
Hi,

That doesn’t work. Just having my own msft.csv file in my directory doesn't change anything as it is still pointing to some other msft.csv someplace on my computron. (what and where is this file?)

I also have never opened a file this way. I had prevously just used something like:

for l in open(filename).readlines():
l = l.strip().split()
data.append([float(l[0]), float(l[1]), float(l[2]), int(l[3])])

values = [1,2,3,4]

-

I think ithis is just some example file that gets installed some place so that the examples work?

What does asfileobj=False do?

Goodness the whole world of Python has radically changed in the short time I have been out of the game.
The sample code reads data from msft.csv. If you enter your data into
a text editor and save it as msft.csv in python's current working
directory, then the following minimal code (pruned from plotfile_demo)
from pylab import plotfile, show, gca
import matplotlib.cbook as cbook
fname = cbook.get_sample_data('msft.csv', asfileobj=False)
#test 5; single subplot
plotfile(fname, ('date', 'open', 'high', 'low', 'close'), subplots=False)
show()
------------------------------------------------------------------------------
Benjamin Root
2015-08-14 17:14:48 UTC
Permalink
All "cbook.get_sample_data(..., asfileobj=False)" does is returns the full
filename path to a given file stored in our package for demonstration
purposes. You can ignore that entirely. Just say "fname = 'foobar.csv'" and
have your own csv file called "foobar.csv" sitting in your current working
directory. "plotfile()" works by reading in a CSV file and plotting the
columns given. So, the CSV file will need in its first line those column
headers. The first one given will be for the x-axis, while the rest are for
the individual lines.

Does that help?
Ben Root
Hi,
That doesn’t work. Just having my own msft.csv file in my directory
doesn't change anything as it is still pointing to some other msft.csv
someplace on my computron. (what and where is this file?)
l = l.strip().split()
data.append([float(l[0]), float(l[1]), float(l[2]), int(l[3])])
values = [1,2,3,4]
-
I think ithis is just some example file that gets installed some place so
that the examples work?
What does asfileobj=False do?
Goodness the whole world of Python has radically changed in the short time
I have been out of the game.
The sample code reads data from msft.csv. If you enter your data into
a text editor and save it as msft.csv in python's current working
directory, then the following minimal code (pruned from plotfile_demo)
from pylab import plotfile, show, gca
import matplotlib.cbook as cbook
fname = cbook.get_sample_data('msft.csv', asfileobj=False)
#test 5; single subplot
plotfile(fname, ('date', 'open', 'high', 'low', 'close'), subplots=False)
show()
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Kevin Parks
2015-08-14 17:37:26 UTC
Permalink
That does help. But then that means I need to reformat my data somehow? I want it so that each “voice” is plotted separately as a unique color and my legend would be

Voice 1 -----
Voice 2 -----
Voice 3 -----
Voice 4 -----

Just as if I had the temperature for four different days plotted.

confused
All "cbook.get_sample_data(..., asfileobj=False)" does is returns the full filename path to a given file stored in our package for demonstration purposes. You can ignore that entirely. Just say "fname = 'foobar.csv'" and have your own csv file called "foobar.csv" sitting in your current working directory. "plotfile()" works by reading in a CSV file and plotting the columns given. So, the CSV file will need in its first line those column headers. The first one given will be for the x-axis, while the rest are for the individual lines.
Does that help?
Ben Root
------------------------------------------------------------------------------
Christian Alis
2015-08-14 17:19:46 UTC
Permalink
According to http://matplotlib.org/1.4.3/api/cbook_api.html#matplotlib.cbook.get_sample_data,
msft.csv should be located at the mpl-data/sample_data directory.

In that case, save the following as sample.csv on the current directory:

event_start_time, event_duration, frequency_value, voice
0.0, 2.5, 60, 1
2.0, 1.5, 62, 4
4.0, 5.0, 64, 2
6.0, 3.5, 65, 3
8.0, 1.5, 67, 1
10.0, 2.0, 69, 4
12.0, 5.5, 71, 3
14.0, 3.0, 70, 2
16.0, 2.0, 72, 1
18.0, 1.0, 74, 4
20.0, 0.5, 75, 3
22.0, 1.5, 77, 2
24.0, 0.5, 79, 1

Then run the following code:

from pylab import plotfile, show, gca

#test 5; single subplot
plotfile('sample.csv', ('event_start_time', 'event_duration',
'frequency_value', 'voice'), subplots=False)

show()

Regards,

Christian
Post by Kevin Parks
Hi,
That doesn’t work. Just having my own msft.csv file in my directory doesn't change anything as it is still pointing to some other msft.csv someplace on my computron. (what and where is this file?)
l = l.strip().split()
data.append([float(l[0]), float(l[1]), float(l[2]), int(l[3])])
values = [1,2,3,4]
-
I think ithis is just some example file that gets installed some place so that the examples work?
What does asfileobj=False do?
Goodness the whole world of Python has radically changed in the short time I have been out of the game.
The sample code reads data from msft.csv. If you enter your data into
a text editor and save it as msft.csv in python's current working
directory, then the following minimal code (pruned from plotfile_demo)
from pylab import plotfile, show, gca
import matplotlib.cbook as cbook
fname = cbook.get_sample_data('msft.csv', asfileobj=False)
#test 5; single subplot
plotfile(fname, ('date', 'open', 'high', 'low', 'close'), subplots=False)
show()
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
------------------------------------------------------------------------------
Anthony Rollett
2015-08-14 17:14:47 UTC
Permalink
Maybe using “genfromtxt" is simpler as a way to get going, see below for a fragment of script? It should be able to read a CSV file since it’s just a comma delimited text file. You might need to look up how to set the delimiter character.
regards
Tony Rollet
#!/usr/bin/env python
"""
simple line/scatter plot.
"""
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from numpy import *
import scipy.interpolate
isosphere = genfromtxt("KAM_test_5Oct14strs_strn.txt", names=True )
Hi,
That doesn’t work. Just having my own msft.csv file in my directory doesn't change anything as it is still pointing to some other msft.csv someplace on my computron. (what and where is this file?)
l = l.strip().split()
data.append([float(l[0]), float(l[1]), float(l[2]), int(l[3])])
values = [1,2,3,4]
-
I think ithis is just some example file that gets installed some place so that the examples work?
What does asfileobj=False do?
Goodness the whole world of Python has radically changed in the short time I have been out of the game.
The sample code reads data from msft.csv. If you enter your data into
a text editor and save it as msft.csv in python's current working
directory, then the following minimal code (pruned from plotfile_demo)
from pylab import plotfile, show, gca
import matplotlib.cbook as cbook
fname = cbook.get_sample_data('msft.csv', asfileobj=False)
#test 5; single subplot
plotfile(fname, ('date', 'open', 'high', 'low', 'close'), subplots=False)
show()
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
------------------------------------------------------------------------------
Thomas Caswell
2015-08-14 17:48:21 UTC
Permalink
If you are trying to read a CSV file, I strongly suspect using pandas for
ingesting them.

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

Also, please use the new mailing list at matplotlib-***@python.org.

Tom
Maybe using “genfromtxt" is simpler as a way to get going, see below for a
fragment of script? It should be able to read a CSV file since it’s just a
comma delimited text file. You might need to look up how to set the
delimiter character.
regards
Tony Rollet
#!/usr/bin/env python
"""
simple line/scatter plot.
"""
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from numpy import *
import scipy.interpolate
isosphere = genfromtxt("KAM_test_5Oct14strs_strn.txt", names=True )
Hi,
That doesn’t work. Just having my own msft.csv file in my directory
doesn't change anything as it is still pointing to some other msft.csv
someplace on my computron. (what and where is this file?)
I also have never opened a file this way. I had prevously just used
l = l.strip().split()
data.append([float(l[0]), float(l[1]), float(l[2]), int(l[3])])
values = [1,2,3,4]
-
I think ithis is just some example file that gets installed some place
so that the examples work?
What does asfileobj=False do?
Goodness the whole world of Python has radically changed in the short
time I have been out of the game.
The sample code reads data from msft.csv. If you enter your data into
a text editor and save it as msft.csv in python's current working
directory, then the following minimal code (pruned from plotfile_demo)
from pylab import plotfile, show, gca
import matplotlib.cbook as cbook
fname = cbook.get_sample_data('msft.csv', asfileobj=False)
#test 5; single subplot
plotfile(fname, ('date', 'open', 'high', 'low', 'close'),
subplots=False)
show()
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Continue reading on narkive:
Loading...