source: qesdi/graphplotter/trunk/graphplotter/lib/plot_builder.py @ 6319

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/graphplotter/trunk/graphplotter/lib/plot_builder.py@6319
Revision 6319, 1.6 KB checked in by pnorton, 11 years ago (diff)

Enabled plotting against an axis of named values as well as numeric values.

Line 
1'''
2Created on 14 Jan 2010
3
4@author: pnorton
5'''
6
7from linplot import Plot
8import cdms2 as cdms
9
10from graphplotter.lib.data_reader import DataReader
11
12import logging
13
14log = logging.getLogger(__name__)
15
16class PlotBuilder(object):
17    '''
18    Builds a plot using the linplot library
19    '''
20
21
22    def __init__(self, params, config):
23        '''
24        Constructor
25        '''
26        self.params = params
27        self.config = config
28   
29    def buildPlot(self):
30       
31        selection = self._buildSelection()
32       
33        log.debug("selection = %s" % (selection,))
34       
35        reader = DataReader(self.config['path'], self.config['axisLookup'])
36       
37        log.debug("reader.getData = %s" % (reader.getData,))
38        xdata, ydata = reader.getData(self.params['variable'], 
39                            self.params['axis'], selection)
40       
41        log.debug("xdata = %s, ydata = %s" % (xdata, ydata,))
42       
43        plt = Plot()
44       
45        plt.setYLabel(self.params['variable'])
46        plt.setXLabel(self.params['axis'])
47       
48        lineName = self._getLineName(selection)
49       
50        plt.draw(xdata, ydata, label=lineName)
51       
52        return plt.getImage()
53   
54    def _buildSelection(self):
55        sel = {}
56       
57        for k, v in self.params.items():
58            if k.find('sel_') == 0:
59                sel[k[4:]] = v
60       
61        return sel
62   
63    def _getLineName(self, selection):
64       
65        name = ""
66       
67        for k in sorted(selection.keys()):
68            name = name + "%s=%s, " % (k, selection[k])
69       
70        name = name[:-2]
71        return name
Note: See TracBrowser for help on using the repository browser.