figure.py
245 lines
| 6.9 KiB
| text/x-python
|
PythonLexer
|
r201 | import numpy | ||
|
r190 | import mpldriver | ||
|
r201 | |||
|
r190 | class Figure: | ||
|
r201 | |||
__driver = mpldriver | ||||
|
r206 | fig = None | ||
|
r201 | |||
idfigure = None | ||||
wintitle = None | ||||
|
r192 | width = None | ||
height = None | ||||
|
r201 | nplots = None | ||
axesObjList = [] | ||||
WIDTH = None | ||||
HEIGHT = None | ||||
def __init__(self): | ||||
raise ValueError, "This method is not implemented" | ||||
|
r206 | def __del__(self): | ||
self.__driver.closeFigure() | ||||
|
r201 | def getAxesObjList(self): | ||
return self.axesObjList | ||||
def getSubplots(self): | ||||
raise ValueError, "Abstract method: This method should be defined" | ||||
def getScreenDim(self): | ||||
nrow, ncol = self.getSubplots() | ||||
width = self.WIDTH*ncol | ||||
height = self.HEIGHT*nrow | ||||
return width, height | ||||
def init(self, idfigure, nplots, wintitle): | ||||
|
r204 | |||
raise ValueError, "This method has been replaced with createFigure" | ||||
def createFigure(self, idfigure, wintitle): | ||||
|
r201 | |||
""" | ||||
|
r204 | Crea la figura de acuerdo al driver y parametros seleccionados seleccionados. | ||
Las dimensiones de la pantalla es calculada a partir de los atributos self.WIDTH | ||||
y self.HEIGHT y el numero de subplots (nrow, ncol) | ||||
|
r201 | Input: | ||
|
r204 | idfigure : Los parametros necesarios son | ||
wintitle : | ||||
|
r201 | """ | ||
|
r190 | |||
self.idfigure = idfigure | ||||
|
r201 | |||
self.wintitle = wintitle | ||||
self.width, self.height = self.getScreenDim() | ||||
self.fig = self.__driver.createFigure(self.idfigure, | ||||
self.wintitle, | ||||
self.width, | ||||
self.height) | ||||
self.axesObjList = [] | ||||
|
r190 | |||
|
r201 | def setDriver(self, driver=mpldriver): | ||
self.__driver = driver | ||||
|
r190 | def setTitle(self, title): | ||
|
r201 | |||
self.__driver.setTitle(self.fig, title) | ||||
|
r190 | |||
|
r201 | def setWinTitle(self, title): | ||
self.__driver.setWinTitle(self.fig, title=title) | ||||
|
r196 | |||
|
r201 | def setTextFromAxes(self, text): | ||
raise ValueError, "Este metodo ha sido reemplazaado con el metodo setText de la clase Axes" | ||||
|
r190 | |||
def makeAxes(self, nrow, ncol, xpos, ypos, colspan, rowspan): | ||||
|
r201 | |||
raise ValueError, "Este metodo ha sido reemplazaado con el metodo addAxes" | ||||
def addAxes(self, *args): | ||||
""" | ||||
Input: | ||||
*args : Los parametros necesarios son | ||||
nrow, ncol, xpos, ypos, colspan, rowspan | ||||
""" | ||||
axesObj = Axes(self.fig, *args) | ||||
self.axesObjList.append(axesObj) | ||||
|
r190 | |||
def draw(self): | ||||
|
r201 | |||
self.__driver.draw(self.fig) | ||||
|
r190 | |||
def run(self): | ||||
|
r201 | |||
raise ValueError, "This method is not implemented" | ||||
axesList = property(getAxesObjList) | ||||
|
r190 | |||
class Axes: | ||||
|
r201 | |||
__driver = mpldriver | ||||
fig = None | ||||
|
r190 | ax = None | ||
|
r201 | plot = None | ||
|
r190 | |||
|
r201 | firsttime = None | ||
|
r204 | __showprofile = False | ||
|
r201 | def __init__(self, *args): | ||
""" | ||||
Input: | ||||
*args : Los parametros necesarios son | ||||
fig, nrow, ncol, xpos, ypos, colspan, rowspan | ||||
""" | ||||
ax = self.__driver.createAxes(*args) | ||||
self.fig = args[0] | ||||
|
r190 | self.ax = ax | ||
|
r201 | self.plot = None | ||
self.firsttime = True | ||||
def setText(self, text): | ||||
self.__driver.setAxesText(self.ax, text) | ||||
def pline(self, x, y, | ||||
xmin=None, xmax=None, | ||||
ymin=None, ymax=None, | ||||
xlabel='', ylabel='', | ||||
title='', | ||||
**kwargs): | ||||
""" | ||||
Input: | ||||
x : | ||||
y : | ||||
xmin : | ||||
xmax : | ||||
ymin : | ||||
ymax : | ||||
xlabel : | ||||
ylabel : | ||||
title : | ||||
**kwargs : Los parametros aceptados son | ||||
ticksize | ||||
|
r204 | ytick_visible | ||
|
r201 | """ | ||
if self.firsttime: | ||||
if xmin == None: xmin = numpy.nanmin(x) | ||||
if xmax == None: xmax = numpy.nanmax(x) | ||||
if ymin == None: ymin = numpy.nanmin(y) | ||||
if ymax == None: ymax = numpy.nanmax(y) | ||||
self.plot = self.__driver.createPline(self.ax, x, y, | ||||
xmin, xmax, | ||||
ymin, ymax, | ||||
xlabel=xlabel, | ||||
ylabel=ylabel, | ||||
title=title, | ||||
**kwargs) | ||||
self.firsttime = False | ||||
return | ||||
self.__driver.pline(self.plot, x, y, xlabel=xlabel, | ||||
ylabel=ylabel, | ||||
title=title) | ||||
def pcolor(self, x, y, z, | ||||
xmin=None, xmax=None, | ||||
ymin=None, ymax=None, | ||||
zmin=None, zmax=None, | ||||
xlabel='', ylabel='', | ||||
title='', | ||||
**kwargs): | ||||
""" | ||||
Input: | ||||
x : | ||||
y : | ||||
x : | ||||
xmin : | ||||
xmax : | ||||
ymin : | ||||
ymax : | ||||
zmin : | ||||
zmax : | ||||
xlabel : | ||||
ylabel : | ||||
title : | ||||
**kwargs : Los parametros aceptados son | ||||
ticksize=9, | ||||
cblabel='' | ||||
""" | ||||
if self.firsttime: | ||||
if xmin == None: xmin = numpy.nanmin(x) | ||||
if xmax == None: xmax = numpy.nanmax(x) | ||||
if ymin == None: ymin = numpy.nanmin(y) | ||||
if ymax == None: ymax = numpy.nanmax(y) | ||||
if zmin == None: zmin = numpy.nanmin(z) | ||||
if zmax == None: zmax = numpy.nanmax(z) | ||||
self.plot = self.__driver.createPcolor(self.ax, x, y, z, | ||||
xmin, xmax, | ||||
ymin, ymax, | ||||
zmin, zmax, | ||||
xlabel=xlabel, | ||||
ylabel=ylabel, | ||||
title=title, | ||||
**kwargs) | ||||
self.firsttime = False | ||||
return | ||||
mesh = self.__driver.pcolor(self.plot, z, xlabel=xlabel, | ||||
ylabel=ylabel, | ||||
title=title) | ||||