~cka/openwns-wrowser/openwnsIsParentPackage

« back to all changes in this revision

Viewing changes to wrowser/FigurePlotter.py

  • Committer: Klaus Sambale
  • Date: 2010-02-16 18:04:33 UTC
  • mfrom: (57.1.27 openwns-wrowser)
  • Revision ID: ksw@comnets.rwth-aachen.de-20100216180433-pxa4khv2ekg2rt88
Changelog:

- New export feature: generated python script requests results from the database and plots them via matplotlib

- Campaign title is added to the window title

- In the "Select Campaign" window the user's own campaigns are automatically opened in the tree view

- "Probe Info" window displays also the scenario id

- When selecting multiple probes to be plotted only the differing parts of the probenames are shown in the legend widget

- Aggregation feature is only available for Parameter and PDF/CDF/CCDF Figures

- When aggregating graphs in Parameter and PDF/CDF/CCDF Figures the original graphs are weighted equally

- Graph configuration (title, scaling, markers...) is kept when redrawing the graphs

- Legend markers are displayed correctly under Ubuntu 9.10 (karmic)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import optparse
 
2
import sys
 
3
import os
 
4
import math
 
5
import wrowser.Configuration as simDbConf
 
6
import wrowser.simdb.Database as simDb
 
7
from wrowser.simdb.Campaigns import setCampaign as simDbSetCampaign
 
8
 
 
9
from wrowser.probeselector import PostgresReader
 
10
from wrowser.probeselector import Interface
 
11
from wrowser.probeselector import Representations
 
12
from wrowser.probeselector import Errors
 
13
from wrowser.probeselector.Interface import Facade
 
14
 
 
15
from matplotlib import rc
 
16
from matplotlib.figure import Figure
 
17
from matplotlib.backends.backend_pdf import FigureCanvasPdf as FigureCanvas
 
18
from matplotlib.font_manager import FontProperties
 
19
from pylab import *
 
20
 
 
21
from scipy.special import erf
 
22
 
 
23
def loadCampaignAndPlotGraphs(PlotParameters):
 
24
    def lineStyle():
 
25
 
 
26
        for style in PlotParameters.color_sytles :
 
27
            yield style
 
28
 
 
29
    def lineStyleSW():
 
30
 
 
31
        for style in PlotParameters.bw_styles :
 
32
            yield style
 
33
 
 
34
    def hatches():
 
35
 
 
36
        for hatch in ['/','\\','|','-','+','x','.','//','\\' ]:
 
37
            yield hatch
 
38
 
 
39
    ## Get the campaign
 
40
    dbConfig = simDbConf.Configuration()
 
41
    dbConfig.read()
 
42
    simDb.Database.connectConf(dbConfig)
 
43
    simDbSetCampaign([int(PlotParameters.campaignId)])
 
44
    campaignReader = PostgresReader.CampaignReader(int(PlotParameters.campaignId), Interface.DoNotSelectProbeSelectUI())
 
45
    print 'Accessing charts from database server with campaignId: ' + str(PlotParameters.campaignId)
 
46
 
 
47
 
 
48
    print "Reading Campaign"
 
49
    campaign = Representations.Campaign(*campaignReader.read())
 
50
    print "Creating Facade:",
 
51
    ch = Interface.Facade(campaign)
 
52
    print "done"
 
53
 
 
54
    outputdir = 'figures'
 
55
    if not os.path.exists(outputdir) :
 
56
        os.makedirs(outputdir)
 
57
 
 
58
    font = FontProperties()
 
59
    font.set_size('x-large')
 
60
 
 
61
    filteredFacade = ch.filteredByExpression(PlotParameters.filterExpression)
 
62
    print "Found " + str(len(filteredFacade.getScenarios())) + " scenarios"
 
63
 
 
64
    figure(figsize=(9, 8))
 
65
    grid()
 
66
    xlabel(PlotParameters.xLabel,fontproperties = font)
 
67
    ylabel(PlotParameters.yLabel,fontproperties = font)
 
68
 
 
69
    labels=[]
 
70
 
 
71
    if PlotParameters.color:
 
72
        ls = lineStyle()
 
73
    else:
 
74
        ls = lineStyleSW()
 
75
 
 
76
    probeNr = 0
 
77
    try:
 
78
     if PlotParameters.type == 'Param':
 
79
        if PlotParameters.useXProbe:
 
80
            graphList = filteredFacade.getGraphs(PlotParameters.parameterName, PlotParameters.probeName, PlotParameters.probeEntry, PlotParameters.aggrParam, PlotParameters.confidence, PlotParameters.confidenceLevel, plotNotAggregatedGraphs=PlotParameters.originalPlots, useXProbe = PlotParameters.useXProbe, xProbeName = PlotParameters.xProbeName, xProbeEntry = PlotParameters.xProbeEntry)
 
81
        else:
 
82
            graphList = filteredFacade.getGraphs(PlotParameters.parameterName, PlotParameters.probeName, PlotParameters.probeEntry, PlotParameters.aggrParam, PlotParameters.confidence, PlotParameters.confidenceLevel, plotNotAggregatedGraphs=PlotParameters.originalPlots)
 
83
     else:
 
84
        graphList = filteredFacade.getHistograms( PlotParameters.probeName, PlotParameters.type, PlotParameters.aggrParam, plotNotAggregatedGraphs=PlotParameters.originalPlots) #, PlotParameters.aggrParam, PlotParameters.confidence)
 
85
    except Errors.MultipleErrors, e:
 
86
     graphList = e.graphs
 
87
 
 
88
    i=0
 
89
    if len(graphList)==0:
 
90
        print "no graphs to plot"
 
91
    for graphNum in PlotParameters.plotOrder :
 
92
        graph = graphList[graphNum]
 
93
        labels.append(str(graph.sortkey))
 
94
 
 
95
        try:
 
96
            style=ls.next()
 
97
        except StopIteration:
 
98
            print "You need to define more linestyles or reduce the number of plotted graphs"
 
99
            os._exit(1)
 
100
        X=[x  for x,y in graph.points]
 
101
        Y=[y*PlotParameters.scaleFactorY+PlotParameters.moveY  for x,y in graph.points]
 
102
        key = Facade.getGraphDescription(graph) #PlotParameters.legendLabelMapping.keys()[i]
 
103
        plot([x*PlotParameters.scaleFactorX+PlotParameters.moveX  for x in X ], Y , style , label=PlotParameters.legendLabelMapping[key], marker=PlotParameters.marker)
 
104
        try:
 
105
          if PlotParameters.type == 'Param':
 
106
            if PlotParameters.confidence :
 
107
                for i in range(len(X)):
 
108
                    e = graph.confidenceIntervalDict[X[i]]
 
109
                    errorbar(X[i]*PlotParameters.scaleFactorX+PlotParameters.moveX, Y[i], yerr=e , fmt=style)
 
110
        except: None
 
111
        i+=1
 
112
    for additional in PlotParameters.additional_plots :
 
113
        plot(additional['x'], additional['y'] , additional['style'] , label=additional['label'])
 
114
 
 
115
    if PlotParameters.doClip:
 
116
        axis([PlotParameters.minX,PlotParameters.maxX,PlotParameters.minY,PlotParameters.maxY])
 
117
    scalex = PlotParameters.scale[0]
 
118
    scaley = PlotParameters.scale[2]
 
119
    if scalex != 'linear' :
 
120
        xbase = PlotParameters.scale[1]
 
121
        xscale('log',basex=xbase)
 
122
    if scaley != 'linear' :
 
123
        ybase= PlotParameters.scale[3]
 
124
        yscale('log',basey=ybase)
 
125
 
 
126
    if PlotParameters.showTitle :
 
127
        title(PlotParameters.figureTitle)
 
128
    if PlotParameters.legend:
 
129
        legend(prop = font, loc=PlotParameters.legendPosition) # (0.9, 0.01))
 
130
    print 'Plotting: ',PlotParameters.fileName
 
131
    savefig(os.path.join(outputdir, PlotParameters.fileName+'.pdf'))
 
132
    savefig(os.path.join(outputdir, PlotParameters.fileName+'.png'))