|
|
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('white', 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('white', 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)
|