##// END OF EJS Templates
Correcion de plot eje, graficos centrados, seleccion de ploteo real,imag, abs por defecto, pruebas integrando5 min
Correcion de plot eje, graficos centrados, seleccion de ploteo real,imag, abs por defecto, pruebas integrando5 min

File last commit:

r1115:dcff65b0bda8
r1244:464f48b8a1f9
Show More
mpldriver.py
501 lines | 13.4 KiB | text/x-python | PythonLexer
import os
import sys
import datetime
import numpy
import matplotlib
if 'BACKEND' in os.environ:
matplotlib.use(os.environ['BACKEND'])
elif 'linux' in sys.platform:
matplotlib.use("TkAgg")
elif 'darwin' in sys.platform:
matplotlib.use('TkAgg')
else:
from schainpy.utils import log
log.warning('Using default Backend="Agg"', 'INFO')
matplotlib.use('Agg')
# Qt4Agg', 'GTK', 'GTKAgg', 'ps', 'agg', 'cairo', 'MacOSX', 'GTKCairo', 'WXAgg', 'template', 'TkAgg', 'GTK3Cairo', 'GTK3Agg', 'svg', 'WebAgg', 'CocoaAgg', 'emf', 'gdk', 'WX'
import matplotlib.pyplot
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.ticker import FuncFormatter, LinearLocator
###########################################
# Actualizacion de las funciones del driver
###########################################
# create jro colormap
jet_values = matplotlib.pyplot.get_cmap("jet", 100)(numpy.arange(100))[10:90]
blu_values = matplotlib.pyplot.get_cmap(
"seismic_r", 20)(numpy.arange(20))[10:15]
ncmap = matplotlib.colors.LinearSegmentedColormap.from_list(
"jro", numpy.vstack((blu_values, jet_values)))
matplotlib.pyplot.register_cmap(cmap=ncmap)
def createFigure(id, wintitle, width, height, facecolor="w", show=True, dpi=80):
matplotlib.pyplot.ioff()
fig = matplotlib.pyplot.figure(num=id, facecolor=facecolor, figsize=(
1.0 * width / dpi, 1.0 * height / dpi))
fig.canvas.manager.set_window_title(wintitle)
# fig.canvas.manager.resize(width, height)
matplotlib.pyplot.ion()
if show:
matplotlib.pyplot.show()
return fig
def closeFigure(show=False, fig=None):
# matplotlib.pyplot.ioff()
# matplotlib.pyplot.pause(0)
if show:
matplotlib.pyplot.show()
if fig != None:
matplotlib.pyplot.close(fig)
# matplotlib.pyplot.pause(0)
# matplotlib.pyplot.ion()
return
matplotlib.pyplot.close("all")
# matplotlib.pyplot.pause(0)
# matplotlib.pyplot.ion()
return
def saveFigure(fig, filename):
# matplotlib.pyplot.ioff()
fig.savefig(filename, dpi=matplotlib.pyplot.gcf().dpi)
# matplotlib.pyplot.ion()
def clearFigure(fig):
fig.clf()
def setWinTitle(fig, title):
fig.canvas.manager.set_window_title(title)
def setTitle(fig, title):
fig.suptitle(title)
def createAxes(fig, nrow, ncol, xpos, ypos, colspan, rowspan, polar=False):
matplotlib.pyplot.ioff()
matplotlib.pyplot.figure(fig.number)
axes = matplotlib.pyplot.subplot2grid((nrow, ncol),
(xpos, ypos),
colspan=colspan,
rowspan=rowspan,
polar=polar)
matplotlib.pyplot.ion()
return axes
def setAxesText(ax, text):
ax.annotate(text,
xy=(.1, .99),
xycoords='figure fraction',
horizontalalignment='left',
verticalalignment='top',
fontsize=10)
def printLabels(ax, xlabel, ylabel, title):
ax.set_xlabel(xlabel, size=11)
ax.set_ylabel(ylabel, size=11)
ax.set_title(title, size=8)
def createPline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='',
ticksize=9, xtick_visible=True, ytick_visible=True,
nxticks=4, nyticks=10,
grid=None, color='blue'):
"""
Input:
grid : None, 'both', 'x', 'y'
"""
matplotlib.pyplot.ioff()
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
printLabels(ax, xlabel, ylabel, title)
######################################################
if (xmax - xmin) <= 1:
xtickspos = numpy.linspace(xmin, xmax, nxticks)
xtickspos = numpy.array([float("%.1f" % i) for i in xtickspos])
ax.set_xticks(xtickspos)
else:
xtickspos = numpy.arange(nxticks) * \
int((xmax - xmin) / (nxticks)) + int(xmin)
# xtickspos = numpy.arange(nxticks)*float(xmax-xmin)/float(nxticks) + int(xmin)
ax.set_xticks(xtickspos)
for tick in ax.get_xticklabels():
tick.set_visible(xtick_visible)
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
######################################################
for tick in ax.get_yticklabels():
tick.set_visible(ytick_visible)
for tick in ax.yaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
ax.plot(x, y, color=color)
iplot = ax.lines[-1]
######################################################
if '0.' in matplotlib.__version__[0:2]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if '1.0.' in matplotlib.__version__[0:4]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if grid != None:
ax.grid(b=True, which='major', axis=grid)
matplotlib.pyplot.tight_layout()
matplotlib.pyplot.ion()
return iplot
def set_linedata(ax, x, y, idline):
ax.lines[idline].set_data(x, y)
def pline(iplot, x, y, xlabel='', ylabel='', title=''):
ax = iplot.axes
printLabels(ax, xlabel, ylabel, title)
set_linedata(ax, x, y, idline=0)
def addpline(ax, x, y, color, linestyle, lw):
ax.plot(x, y, color=color, linestyle=linestyle, lw=lw)
def createPcolor(ax, x, y, z, xmin, xmax, ymin, ymax, zmin, zmax,
xlabel='', ylabel='', title='', ticksize=9,
colormap='jet', cblabel='', cbsize="5%",
XAxisAsTime=False):
matplotlib.pyplot.ioff()
divider = make_axes_locatable(ax)
ax_cb = divider.new_horizontal(size=cbsize, pad=0.05)
fig = ax.get_figure()
fig.add_axes(ax_cb)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
printLabels(ax, xlabel, ylabel, title)
z = numpy.ma.masked_invalid(z)
cmap = matplotlib.pyplot.get_cmap(colormap)
cmap.set_bad('black', 1.)
imesh = ax.pcolormesh(x, y, z.T, vmin=zmin, vmax=zmax, cmap=cmap)
cb = matplotlib.pyplot.colorbar(imesh, cax=ax_cb)
cb.set_label(cblabel)
# for tl in ax_cb.get_yticklabels():
# tl.set_visible(True)
for tick in ax.yaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
for tick in cb.ax.get_yticklabels():
tick.set_fontsize(ticksize)
ax_cb.yaxis.tick_right()
if '0.' in matplotlib.__version__[0:2]:
print "The matplotlib version has to be updated to 1.1 or newer"
return imesh
if '1.0.' in matplotlib.__version__[0:4]:
print "The matplotlib version has to be updated to 1.1 or newer"
return imesh
matplotlib.pyplot.tight_layout()
if XAxisAsTime:
def func(x, pos): return ('%s') % (
datetime.datetime.utcfromtimestamp(x).strftime("%H:%M:%S"))
ax.xaxis.set_major_formatter(FuncFormatter(func))
ax.xaxis.set_major_locator(LinearLocator(7))
matplotlib.pyplot.ion()
return imesh
def pcolor(imesh, z, xlabel='', ylabel='', title=''):
z = z.T
ax = imesh.axes
printLabels(ax, xlabel, ylabel, title)
imesh.set_array(z.ravel())
def addpcolor(ax, x, y, z, zmin, zmax, xlabel='', ylabel='', title='', colormap='jet'):
printLabels(ax, xlabel, ylabel, title)
ax.pcolormesh(x, y, z.T, vmin=zmin, vmax=zmax,
cmap=matplotlib.pyplot.get_cmap(colormap))
def addpcolorbuffer(ax, x, y, z, zmin, zmax, xlabel='', ylabel='', title='', colormap='jet'):
printLabels(ax, xlabel, ylabel, title)
ax.collections.remove(ax.collections[0])
z = numpy.ma.masked_invalid(z)
cmap = matplotlib.pyplot.get_cmap(colormap)
cmap.set_bad('black', 1.)
ax.pcolormesh(x, y, z.T, vmin=zmin, vmax=zmax, cmap=cmap)
def createPmultiline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', legendlabels=None,
ticksize=9, xtick_visible=True, ytick_visible=True,
nxticks=4, nyticks=10,
grid=None):
"""
Input:
grid : None, 'both', 'x', 'y'
"""
matplotlib.pyplot.ioff()
lines = ax.plot(x.T, y)
leg = ax.legend(lines, legendlabels, loc='upper right')
leg.get_frame().set_alpha(0.5)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
printLabels(ax, xlabel, ylabel, title)
xtickspos = numpy.arange(nxticks) * \
int((xmax - xmin) / (nxticks)) + int(xmin)
ax.set_xticks(xtickspos)
for tick in ax.get_xticklabels():
tick.set_visible(xtick_visible)
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
for tick in ax.get_yticklabels():
tick.set_visible(ytick_visible)
for tick in ax.yaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
iplot = ax.lines[-1]
if '0.' in matplotlib.__version__[0:2]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if '1.0.' in matplotlib.__version__[0:4]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if grid != None:
ax.grid(b=True, which='major', axis=grid)
matplotlib.pyplot.tight_layout()
matplotlib.pyplot.ion()
return iplot
def pmultiline(iplot, x, y, xlabel='', ylabel='', title=''):
ax = iplot.axes
printLabels(ax, xlabel, ylabel, title)
for i in range(len(ax.lines)):
line = ax.lines[i]
line.set_data(x[i, :], y)
def createPmultilineYAxis(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', legendlabels=None,
ticksize=9, xtick_visible=True, ytick_visible=True,
nxticks=4, nyticks=10, marker='.', markersize=10, linestyle="None",
grid=None, XAxisAsTime=False):
"""
Input:
grid : None, 'both', 'x', 'y'
"""
matplotlib.pyplot.ioff()
# lines = ax.plot(x, y.T, marker=marker,markersize=markersize,linestyle=linestyle)
lines = ax.plot(x, y.T)
# leg = ax.legend(lines, legendlabels, loc=2, bbox_to_anchor=(1.01, 1.00), numpoints=1, handlelength=1.5, \
# handletextpad=0.5, borderpad=0.5, labelspacing=0.5, borderaxespad=0.)
leg = ax.legend(lines, legendlabels,
loc='upper right', bbox_to_anchor=(1.16, 1), borderaxespad=0)
for label in leg.get_texts():
label.set_fontsize(9)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
printLabels(ax, xlabel, ylabel, title)
# xtickspos = numpy.arange(nxticks)*int((xmax-xmin)/(nxticks)) + int(xmin)
# ax.set_xticks(xtickspos)
for tick in ax.get_xticklabels():
tick.set_visible(xtick_visible)
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
for tick in ax.get_yticklabels():
tick.set_visible(ytick_visible)
for tick in ax.yaxis.get_major_ticks():
tick.label.set_fontsize(ticksize)
iplot = ax.lines[-1]
if '0.' in matplotlib.__version__[0:2]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if '1.0.' in matplotlib.__version__[0:4]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if grid != None:
ax.grid(b=True, which='major', axis=grid)
matplotlib.pyplot.tight_layout()
if XAxisAsTime:
def func(x, pos): return ('%s') % (
datetime.datetime.utcfromtimestamp(x).strftime("%H:%M:%S"))
ax.xaxis.set_major_formatter(FuncFormatter(func))
ax.xaxis.set_major_locator(LinearLocator(7))
matplotlib.pyplot.ion()
return iplot
def pmultilineyaxis(iplot, x, y, xlabel='', ylabel='', title=''):
ax = iplot.axes
printLabels(ax, xlabel, ylabel, title)
for i in range(len(ax.lines)):
line = ax.lines[i]
line.set_data(x, y[i, :])
def createPolar(ax, x, y,
xlabel='', ylabel='', title='', ticksize=9,
colormap='jet', cblabel='', cbsize="5%",
XAxisAsTime=False):
matplotlib.pyplot.ioff()
ax.plot(x, y, 'bo', markersize=5)
# ax.set_rmax(90)
ax.set_ylim(0, 90)
ax.set_yticks(numpy.arange(0, 90, 20))
# ax.text(0, -110, ylabel, rotation='vertical', va ='center', ha = 'center' ,size='11')
# ax.text(0, 50, ylabel, rotation='vertical', va ='center', ha = 'left' ,size='11')
# ax.text(100, 100, 'example', ha='left', va='center', rotation='vertical')
ax.yaxis.labelpad = 40
printLabels(ax, xlabel, ylabel, title)
iplot = ax.lines[-1]
if '0.' in matplotlib.__version__[0:2]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
if '1.0.' in matplotlib.__version__[0:4]:
print "The matplotlib version has to be updated to 1.1 or newer"
return iplot
# if grid != None:
# ax.grid(b=True, which='major', axis=grid)
matplotlib.pyplot.tight_layout()
matplotlib.pyplot.ion()
return iplot
def polar(iplot, x, y, xlabel='', ylabel='', title=''):
ax = iplot.axes
# ax.text(0, -110, ylabel, rotation='vertical', va ='center', ha = 'center',size='11')
printLabels(ax, xlabel, ylabel, title)
set_linedata(ax, x, y, idline=0)
def draw(fig):
if type(fig) == 'int':
raise ValueError, "Error drawing: Fig parameter should be a matplotlib figure object figure"
fig.canvas.draw()
def pause(interval=0.000001):
matplotlib.pyplot.pause(interval)