Skip to content

Commit ae5aed5

Browse files
author
stephanie
committed
plot timeseries #293
1 parent 0dfa0c7 commit ae5aed5

File tree

6 files changed

+204
-212
lines changed

6 files changed

+204
-212
lines changed

odmtools/controller/frmSeriesSelector.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def OnTableRightDown(self, event):
162162
# build pop-up menu for right-click display
163163
self.selectedIndex = event.m_itemIndex
164164
#self.selectedID = self.tableSeries.getColumnText(event.m_itemIndex, 1)
165-
self.selectedID = self.tblSeries.GetSelectedObject().id
165+
self.selectedID = self.tblSeries.GetSelectedObject().resultID
166166

167167
# print self.selectedID
168168
popup_edit_series = wx.NewId()
@@ -374,7 +374,7 @@ def siteAndVariables(self):
374374
375375
:return:
376376
"""
377-
self.site_code = self.siteList[self.cbSites.Selection].VariableCode
377+
self.site_code = self.siteList[self.cbSites.Selection].SamplingFeatureCode
378378

379379
self.cbVariables.Clear()
380380
self.varList = self.series_service.get_variables_by_site_code(self.site_code)
@@ -400,7 +400,7 @@ def siteOnly(self):
400400
self.cbSites.Enabled = True
401401
self.variable_code = None
402402

403-
self.site_code = self.siteList[self.cbSites.Selection].code
403+
self.site_code = self.siteList[self.cbSites.Selection].SamplingFeatureCode
404404
self.setFilter(site_code=self.site_code)
405405

406406
def variableOnly(self):
@@ -460,17 +460,17 @@ def setFilter(self, site_code='', var_code='', advfilter=''):
460460
:return:
461461
"""
462462
if site_code and var_code:
463-
self.siteFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[3:4],text=site_code)
464-
self.variableFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[6:7],text=var_code)
463+
self.siteFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[0:10],text=site_code)
464+
self.variableFilter = TextSearch(self.tblSeries, columns=self.tblSeries.columns[0:10],text=var_code)
465465
self.tblSeries.SetFilter(Chain(self.siteFilter, self.variableFilter))
466466
elif site_code:
467-
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[3:4], text=site_code))
467+
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[0:10], text=site_code))
468468
elif var_code:
469-
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[6:7], text=var_code))
469+
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[0:10], text=var_code))
470470
elif advfilter:
471471
self.tblSeries.SetFilter(advfilter)
472472
else:
473-
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[0:1]))
473+
self.tblSeries.SetFilter(TextSearch(self.tblSeries, columns=self.tblSeries.columns[0:10]))
474474
self.tblSeries.RepopulateList()
475475

476476

@@ -492,12 +492,12 @@ def onReadyToPlot(self, event):
492492
object = self.tblSeries.GetSelectedObject()
493493

494494
if not self.tblSeries.IsChecked(object):
495-
Publisher.sendMessage("removePlot", seriesID=object.id)
495+
Publisher.sendMessage("removePlot", seriesID=object.ResultID)
496496
Publisher.sendMessage("updateCursor", deselectedObject=object)
497497

498498
else:
499499
logger.debug("Obtained object, entering addplot")
500-
self.pnlPlot.addPlot(self.memDB, object.id)
500+
self.pnlPlot.addPlot(self.memDB, object.ResultID)
501501
Publisher.sendMessage("updateCursor", selectedObject=object)
502502

503503
logger.debug("refreshing...")
@@ -524,7 +524,7 @@ def getSelectedObject(self, event):
524524

525525
## update Cursor
526526
if self.parent.Parent.pnlPlot._seriesPlotInfo:
527-
if self.parent.Parent.pnlPlot._seriesPlotInfo.isPlotted(editingObject.id):
527+
if self.parent.Parent.pnlPlot._seriesPlotInfo.isPlotted(editingObject.ResultID):
528528
#print "Updating Cursor", editingObject.id
529529
Publisher.sendMessage("updateCursor", selectedObject=editingObject)
530530

@@ -563,7 +563,7 @@ def onReadyToEdit(self):
563563
ovl.RefreshObject(ovl.editingObject)
564564

565565

566-
return True, object.id#, self.memDB
566+
return True, object.ResultID#, self.memDB
567567
else:
568568
isSelected = False
569569
logger.debug("series was not checked")

odmtools/controller/logicPlotOptions.py

+34-30
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def __init__(self, prnt):
5454
self.plotTitle = None
5555
self.numBins = 25
5656
self.binWidth = 1.5
57-
self.boxWhiskerMethod = "Month"
57+
self.boxWhiskerMethod = "month"
5858

5959
self.yrange = 0
6060
self.color = ""
@@ -226,8 +226,10 @@ def getSelectedSeries(self, seriesID):
226226
return self.createSeriesInfo(seriesID, seriesInfo, series)
227227

228228
def createSeriesInfo(self, seriesID, seriesInfo, series):
229-
startDate = series.begin_date_time
230-
endDate = series.end_date_time
229+
230+
dates = self.memDB.series_service.get_result_dates(series.ResultID)
231+
startDate = dates[1]
232+
endDate = dates[0]
231233

232234
if endDate > self.endDate:
233235
self.endDate = endDate
@@ -237,14 +239,15 @@ def createSeriesInfo(self, seriesID, seriesInfo, series):
237239
if not self.isSubsetted:
238240
self.currentStart = self.startDate
239241
self.currentEnd = self.endDate
240-
241-
variableName = series.variable_name
242-
unitsName = series.variable_units_name
243-
siteName = series.site_name
244-
dataType = series.data_type
245-
variable = self.memDB.series_service.get_variable_by_id(series.variable_id)
246-
247-
noDataValue = variable.no_data_value
242+
#TODO odm2
243+
244+
unitsName = series.UnitsObj.UnitsName
245+
siteName = series.FeatureActionObj.SamplingFeatureObj.SamplingFeatureName
246+
dataType = "datatype"#series.data_type
247+
#variable = self.memDB.series_service.get_variable_by_id(series.variable_id)
248+
variable =series.VariableObj
249+
variableName = variable.VariableNameCV
250+
noDataValue = variable.NoDataValue
248251
if self.editID == seriesID:
249252
#d= DataFrame(pandas.read_sql())
250253
logger.debug("editing -- getting datavalues for graph")
@@ -256,6 +259,7 @@ def createSeriesInfo(self, seriesID, seriesInfo, series):
256259
data = self.memDB.getDataValuesforGraph(seriesID, noDataValue, self.currentStart, self.currentEnd)
257260
logger.debug("Finished plotting -- getting datavalues for graph")
258261

262+
259263
logger.debug("assigning variables...")
260264
seriesInfo.seriesID = seriesID
261265
seriesInfo.series = series
@@ -266,13 +270,13 @@ def createSeriesInfo(self, seriesID, seriesInfo, series):
266270
seriesInfo.siteName = siteName
267271
seriesInfo.variableName = variableName
268272
seriesInfo.variableUnits = unitsName
269-
seriesInfo.plotTitle = "Site: " + siteName + "\nVarName: " + variableName + "\nQCL: " + series.quality_control_level_code
270-
seriesInfo.axisTitle = variableName + " (" + unitsName + ")"
273+
seriesInfo.plotTitle = "Site: %s \nVarName: %s \nQCL: %s" %(siteName, variableName, series.ProcessingLevelID)
274+
seriesInfo.axisTitle = "%s (%s)"%(variableName, unitsName)
271275
seriesInfo.noDataValue = noDataValue
272276
seriesInfo.dataTable = data
273277

274278
if len(data) > 0:
275-
seriesInfo.yrange = np.max(data['DataValue']) - np.min(data['DataValue'])
279+
seriesInfo.yrange = np.max(data['datavalue']) - np.min(data['datavalue'])
276280
else:
277281
seriesInfo.yrange = 0
278282

@@ -298,9 +302,9 @@ def getSeriesInfo(self, seriesID):
298302

299303
def buildPlotInfo(self, seriesInfo):
300304
#remove all of the nodatavalues from the pandas table
301-
filteredData = seriesInfo.dataTable[seriesInfo.dataTable["DataValue"] != seriesInfo.noDataValue]
302-
val = filteredData["Month"].map(calcSeason)
303-
filteredData["Season"] = val
305+
filteredData = seriesInfo.dataTable[seriesInfo.dataTable["datavalue"] != seriesInfo.noDataValue]
306+
val = filteredData["month"].map(calcSeason)
307+
filteredData["season"] = val
304308

305309
# construct tasks for the task server
306310
tasks = [("Probability", filteredData),
@@ -353,12 +357,12 @@ class Statistics(object):
353357
def __init__(self, data):
354358
start_time = timeit.default_timer()
355359

356-
dvs = data["DataValue"]
360+
dvs = data["datavalue"]
357361
count = len(dvs)
358362
if count > 0:
359363

360364
time = timeit.default_timer()
361-
self.NumberofCensoredObservations = len(data[data["CensorCode"] != "nc"])
365+
self.NumberofCensoredObservations = len(data[data["censorcodecv"] != "nc"])
362366
elapsed = timeit.default_timer() - time
363367
logger.debug("censored observations using len: %s" % elapsed)
364368

@@ -396,13 +400,13 @@ def __init__(self, data, method):
396400
self.intervals = {}
397401
self.method = method
398402

399-
interval_types = ["Overall", "Year", "Month", "Season"]
400-
intervals = ["Overall", "Year", "Month", "Season"]
403+
interval_types = ["overall", "year", "month", "season"]
404+
intervals = ["overall", "year", "month", "season"]
401405

402406
interval_options = zip(interval_types, intervals)
403407
for interval_type, interval in interval_options:
404408
start_time = timeit.default_timer()
405-
if interval_type == "Overall":
409+
if interval_type == "overall":
406410
interval = data
407411
else:
408412
interval = data.groupby(interval_type)
@@ -421,18 +425,18 @@ def calculateBoxWhiskerData(self, interval, interval_type):
421425

422426
results = self.calculateIntervalsOnGroups(interval)
423427

424-
if interval_type == "Season" or interval_type == "Month":
428+
if interval_type == "season" or interval_type == "month":
425429
func = None
426-
if interval_type == "Season":
430+
if interval_type == "season":
427431
func = numToSeason
428-
elif interval_type == "Month":
432+
elif interval_type == "month":
429433
func = numToMonth
430434

431435
self.intervals[interval_type] = BoxWhiskerPlotInfo(
432436
interval_type, interval_type, [func(x) for x in results["names"]],
433437
[results["median"], results["conflimit"], results["mean"], results["confint"]])
434438

435-
elif interval_type == "Overall":
439+
elif interval_type == "overall":
436440
self.intervals[interval_type] = BoxWhiskerPlotInfo(
437441
interval_type, None, [],
438442
[results["median"], results["conflimit"], results["mean"], results["confint"]])
@@ -452,7 +456,7 @@ def calculateIntervalsOnGroups(self, interval):
452456

453457
if isinstance(interval, pd.core.groupby.DataFrameGroupBy):
454458
for name, group in interval:
455-
datavalue = group['DataValue']
459+
datavalue = group['datavalue']
456460
group_mean = np.mean(datavalue)
457461
group_median = np.median(datavalue)
458462
group_std = math.sqrt(np.var(datavalue))
@@ -467,8 +471,8 @@ def calculateIntervalsOnGroups(self, interval):
467471
median.append(group_median)
468472
mean.append(group_mean)
469473
else:
470-
name = "Overall"
471-
datavalue = interval['DataValue']
474+
name = "overall"
475+
datavalue = interval['datavalue']
472476
data_mean = np.mean(datavalue)
473477
data_median = np.median(datavalue)
474478
data_std = math.sqrt(np.var(datavalue))
@@ -539,7 +543,7 @@ def __init__(self, data):
539543
:param data:
540544
:return:
541545
"""
542-
self.yAxis = data['DataValue']
546+
self.yAxis = data['datavalue']
543547
# Determine rank, sorting values doesn't change outcome while using pandas.
544548
ranks = self.yAxis.rank()
545549
PrbExc = ranks / (len(ranks) + 1) * 100

odmtools/gui/mnuRibbon.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ def enableButtons(self, plot, isActive):
658658
self.spnBins.Enabled = False
659659
self.enableDateSelection(True)
660660

661-
##HIstogram
661+
##Histogram
662662
elif plot == 2:
663663
self.PlotsOptions_bar.EnableButton(wxID_RIBBONPLOTTSTYPE, False)
664664
self.PlotsOptions_bar.EnableButton(wxID_RIBBONPLOTTSLEGEND, False)

odmtools/gui/plotBoxWhisker.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,17 @@ def _createPlot(self, oneSeries, rows, cols, index):
116116
ax.scatter([range(1, len(med) + 1)], med, marker='s', c="k", s=10)
117117

118118
# bp = onSeries.dataTable.boxplot(
119-
bp = oneSeries.dataTable[oneSeries.dataTable["DataValue"]<>oneSeries.noDataValue].boxplot(column="DataValue", ax=ax, by=oneSeries.BoxWhisker.currinterval.groupby,
119+
bp = oneSeries.dataTable[oneSeries.dataTable["datavalue"]<>oneSeries.noDataValue].boxplot(column="datavalue", ax=ax, by=oneSeries.BoxWhisker.currinterval.groupby,
120120
rot=35, notch=True, sym="-s", conf_intervals=ci, return_type='dict',
121121
grid=False)
122122

123123
# Set Colors of the Box Whisker plot
124124
try:
125-
plt.setp(bp['DataValue']['whiskers'], color='k', linestyle='-')
126-
plt.setp(bp['DataValue']['medians'], color='k', linestyle='-')
127-
plt.setp(bp['DataValue']['boxes'], color='GREY', linestyle='-')
128-
plt.setp(bp['DataValue']['caps'], color='k')
129-
plt.setp(bp['DataValue']['fliers'], markersize=3.5, color=oneSeries.color)
125+
plt.setp(bp['datavalue']['whiskers'], color='k', linestyle='-')
126+
plt.setp(bp['datavalue']['medians'], color='k', linestyle='-')
127+
plt.setp(bp['datavalue']['boxes'], color='GREY', linestyle='-')
128+
plt.setp(bp['datavalue']['caps'], color='k')
129+
plt.setp(bp['datavalue']['fliers'], markersize=3.5, color=oneSeries.color)
130130
except:
131131
plt.setp(bp['whiskers'], color='k', linestyle='-')
132132
plt.setp(bp['medians'], color='k', linestyle='-')
@@ -169,22 +169,22 @@ def setColor(self, color):
169169

170170
def monthly(self, str):
171171
# print "monthly"
172-
self.seriesPlotInfo.setBoxInterval("Month")
172+
self.seriesPlotInfo.setBoxInterval("month")
173173
self.updatePlot()
174174

175175
def seasonaly(self, str):
176176
# print"seasonal"
177-
self.seriesPlotInfo.setBoxInterval("Season")
177+
self.seriesPlotInfo.setBoxInterval("season")
178178
self.updatePlot()
179179

180180
def yearly(self, str):
181181
# print "yearly"
182-
self.seriesPlotInfo.setBoxInterval("Year")
182+
self.seriesPlotInfo.setBoxInterval("year")
183183
self.updatePlot()
184184

185185
def overall(self, str):
186186
# print "overall"
187-
self.seriesPlotInfo.setBoxInterval("Overall")
187+
self.seriesPlotInfo.setBoxInterval("overall")
188188
self.updatePlot()
189189

190190

odmtools/gui/plotTimeSeries.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ def updatePlot(self):
412412
data = oneSeries.dataTable
413413
dates = data.index.astype(datetime.datetime)
414414
#data.plot(ax=curraxis)
415-
curraxis.plot_date(dates, data['DataValue'],
415+
curraxis.plot_date(dates, data['datavalue'],
416416
color=oneSeries.color, fmt=self.format, xdate=True, tz=None, antialiased=True,
417417
label=oneSeries.plotTitle, alpha=self.alpha, picker=5.0, pickradius=5.0,
418418
markersize=4)
@@ -484,7 +484,7 @@ def updateCursor(self, selectedObject=None, deselectedObject=None):
484484
Activate Cursor. Happens when a plot is selected
485485
"""
486486
if self.seriesPlotInfo:
487-
seriesInfo = self.seriesPlotInfo.getSeries(selectedObject.id)
487+
seriesInfo = self.seriesPlotInfo.getSeries(selectedObject.ResultID)
488488

489489
if seriesInfo:
490490
currentAxis = None

0 commit comments

Comments
 (0)