Unfortunately these matplotlib methods expect the data to be float, where using pandas I am able to parse and handle the time series data as datetime. But graphing in pandas does not seem to inherit all the matplotlib methods (I suppose that would be a mammoth task, including all the method overlays). I'm forming the opinion that I either do the job in numpy/matplotlib with extra code to sculpt the exact format I want or I go the concise and elegant pandas way and live with the loss of control of the x axis.
Thanks, Kevin On 31 August 2014 12:01, Anthony Briggs <[email protected]> wrote: > Quick update: http://matplotlib.org/examples/api/date_demo.html and > http://stackoverflow.com/questions/3677368/matplotlib-format-axis-offset-values-to-whole-numbers-or-specific-number > mention something called a Formatter. DateFormatter from the first link > looks like it should do what you're after (convert to a date rather than a > time). > > Anthony > > > <http://stackoverflow.com/questions/3677368/matplotlib-format-axis-offset-values-to-whole-numbers-or-specific-number> > > > On 31 August 2014 13:57, Anthony Briggs <[email protected]> wrote: > >> Hi Kevin, >> >> Looks like it's just pulling those keys from the data, so something to >> convert those explicitly when you read it in would probably be the easiest >> way. There might be something in the read_csv function to convert data from >> a particular column, or you could try a dictionary comprehension per >> station (something along the lines of station_data = {reading['DT'][:10]: >> reading for reading in d[stn]}. >> >> You seem to have a lot of values for the same day though, so you'd either >> want to grab just the minimum, or do some sort of formatting in matplotlib. >> >> Another method would be to find the minimum value (or minimum 3) for a >> station and just report a warning if it's below a certain amount, rather >> than a graph which someone has to interpret. >> >> Final point - having a lot of one and two character variables makes it >> really hard to tell what your script is doing. >> >> Hope that helps, >> >> Anthony >> >> >> >> On 31 August 2014 11:11, Kevin Shackleton <[email protected]> >> wrote: >> >>> Hi, >>> >>> New to Melbourne PUG. Fairly new to Python. >>> >>> I have a script that interprets power levels at several automated >>> surveying total stations working at a site. The idea is to show that the >>> batteries have enough amp-hours to see the total station through a run of >>> cloudy days. After 2 or 3 years of battery life the battery amp-hour >>> capacity will have reduced to a point where the installation will run often >>> out of power before the solar panels kick in each morning. In practice >>> this is often affected by 3rd parties hanging extra electrical load on our >>> installation. >>> >>> The data looks like this: >>> 2014-06-16T18:40:20,HUT1,56 >>> 2014-06-16T19:02:49,HUT2,15 >>> 2014-06-16T20:16:12,HUT1,58 >>> 2014-06-16T20:17:08,HUT2,11 >>> 2014-06-16T20:51:17,HUT1,67 >>> 2014-06-17T11:51:05,HUT1,100 >>> 2014-06-17T11:51:07,HUT2,48 >>> 2014-06-17T11:51:08,HUT3,57 >>> where power level readings are coming from each of the huts (there are >>> actually 4 of them) at random times and with different data densities per >>> hut according to the cycle schedules. The power levels are percent. Some >>> total stations report in volts but that's another problem. >>> >>> My script solution is: >>> import pandas as pd >>> import matplotlib.pyplot as plt >>> df = pd.read_csv('Power_Log.csv',names=['DT','Station','Power']) >>> df2=df.groupby(['Station']) # set 'Station' as the data index >>> d = dict(iter(df2)) # make a dictionary including each station's data >>> for stn in d.keys(): >>> plt.figure() # creates a new plot canvas >>> fig, ax = plt.subplots() # creates components of the plot >>> ax.set_ylabel('Power (%)',fontsize=12) >>> fig.subplots_adjust(bottom=0.15) >>> d[stn].interpolate().plot(x='DT',y='Power',rot=15,title='Power >>> Level: ' + stn) >>> ax.set_xlabel('Date-Time',fontsize=12) >>> plt.savefig('Station_Power_' + stn + '.png') >>> >>> Possibly a bit wasteful going from dataframe to dataframe to dictionary. >>> >>> This code knocks out nice graphs, except for one thing - the x ticks are >>> at unrounded positions and therefore have long labels. >>> >>> I'm getting nowhere with set_major_formatter and autofmt_xdate methods >>> to try to set the ticks to rounded days. >>> >>> And brilliant ideas here? >>> >>> Thanks, >>> >>> Kevin. >>> >>> _______________________________________________ >>> melbourne-pug mailing list >>> [email protected] >>> https://mail.python.org/mailman/listinfo/melbourne-pug >>> >>> >> > > _______________________________________________ > melbourne-pug mailing list > [email protected] > https://mail.python.org/mailman/listinfo/melbourne-pug > >
_______________________________________________ melbourne-pug mailing list [email protected] https://mail.python.org/mailman/listinfo/melbourne-pug
