I've been trying for weeks to plot 3 sets of (x, y) data on the same plot from a .CSV file, and I'm getting nowhere. My data was originally an Excel file which I have converted to a .CSV file and have used pandas
to read it into IPython as per the following code:
from pandas import DataFrame, read_csv
import pandas as pd
# define data location
df = read_csv(Location)
df[['LimMag1.3', 'ExpTime1.3', 'LimMag2.0', 'ExpTime2.0', 'LimMag2.5','ExpTime2.5']][:7]
My data is in the following format:
Type mag1 time1 mag2 time2 mag3 time3
M0 8.87 41.11 8.41 41.11 8.16 65.78;
...
M6 13.95 4392.03 14.41 10395.13 14.66 25988.32
I'm trying to plot time1
vs mag1
, time2
vs mag2
and time3
vs mag3
, all on the same plot, but instead I get plots of time..
vs Type
, eg. for the code:
df['ExpTime1.3'].plot()
I get 'ExpTime1.3'
(y-axis) plotted against M0
to M6
(x-axis), when what I want is 'ExpTime1.3'
vs 'LimMag1.3'
, with x-labels M0
- M6
.
How do I get
'ExpTime..'
vs'LimMag..'
plots, with all 3 sets of data on the same plot?How do I get the
M0
-M6
labels on the x-axis for the'LimMag..'
values (also on the x-axis)?
Since trying askewchan's solutions, which did not return any plots for reasons unknown, I've found that I can get a plot of ExpTime
vs LimMag
using df['ExpTime1.3'].plot(),
if I change the dataframe index (df.index) to the values of the x axis (LimMag1.3). However, this appears to mean that I have to convert each desired x-axis to the dataframe index by manually inputing all the values of the desired x-axis to make it the data index. I have an awful lot of data, and this method is just too slow, and I can only plot one set of data at a time, when I need to plot all 3 series for each dataset on the one graph. Is there a way around this problem? Or can someone offer a reason, and a solution, as to why I I got no plots whatsoever with the solutions offered by askewchan?\
In response to nordev, I have tried the first version again, bu no plots are produced, not even an empty figure. Each time I put in one of the ax.plot
commands, I do get an output of the type:
[<matplotlib.lines.Line2D at 0xb5187b8>]
, but when I enter the command plt.show()
nothing happens.
When I enter plt.show()
after the loop in askewchan's second solution, I get an error back saying AttributeError: 'function' object has no attribute 'show'
I have done a bit more fiddling with my original code and can now get a plot of ExpTime1.3
vs LimMag1.3
with the code df['ExpTime1.3'][:7].plot()
,by making the index the same as the x axis (LimMag1.3), but I can't get the other two sets of data on the same plot. I would appreciate any further suggestions you may have. I'm using ipython 0.11.0 via Anaconda 1.5.0 (64bit) and spyder on Windows 7 (64bit), python version is 2.7.4.
M0
-M6
as labels on the x-axis would have no real meaning in this situation, as there are three differentLimMag..
-values for everyM..
-label, meaning that every label would have to be placed three different places on the axis. This will ultimately look very confusing rather than informative. – hooy May 16 '13 at 7:52plt
defined as? It shouldn't be a'function' object
Are you familiar with using matplotlib and pyplot? – askewchan May 16 '13 at 15:17