mpldriver.py
447 lines
| 12.9 KiB
| text/x-python
|
PythonLexer
|
r201 | import numpy | |
|
r209 | import datetime | |
|
r245 | import sys | |
|
r190 | import matplotlib | |
|
r264 | ||
if 'linux' in sys.platform: | |||
matplotlib.use("TKAgg") | |||
if 'darwin' in sys.platform: | |||
|
r706 | matplotlib.use('TKAgg') | |
|
r577 | #Qt4Agg', 'GTK', 'GTKAgg', 'ps', 'agg', 'cairo', 'MacOSX', 'GTKCairo', 'WXAgg', 'template', 'TkAgg', 'GTK3Cairo', 'GTK3Agg', 'svg', 'WebAgg', 'CocoaAgg', 'emf', 'gdk', 'WX' | |
|
r190 | import matplotlib.pyplot | |
|
r264 | from mpl_toolkits.axes_grid1 import make_axes_locatable | |
|
r696 | from matplotlib.ticker import FuncFormatter, LinearLocator | |
|
r209 | ||
|
r201 | ########################################### | |
#Actualizacion de las funciones del driver | |||
########################################### | |||
|
r395 | def createFigure(id, wintitle, width, height, facecolor="w", show=True): | |
|
r201 | ||
matplotlib.pyplot.ioff() | |||
|
r395 | fig = matplotlib.pyplot.figure(num=id, facecolor=facecolor) | |
|
r201 | fig.canvas.manager.set_window_title(wintitle) | |
fig.canvas.manager.resize(width, height) | |||
matplotlib.pyplot.ion() | |||
|
r342 | if show: | |
matplotlib.pyplot.show() | |||
|
r201 | ||
return fig | |||
|
r587 | def closeFigure(show=False, fig=None): | |
|
r206 | ||
|
r760 | # matplotlib.pyplot.ioff() | |
|
r706 | # matplotlib.pyplot.pause(0) | |
|
r587 | ||
|
r342 | if show: | |
matplotlib.pyplot.show() | |||
|
r587 | ||
if fig != None: | |||
|
r706 | matplotlib.pyplot.close(fig) | |
# matplotlib.pyplot.pause(0) | |||
|
r672 | # matplotlib.pyplot.ion() | |
|
r706 | ||
|
r587 | return | |
matplotlib.pyplot.close("all") | |||
|
r706 | # matplotlib.pyplot.pause(0) | |
|
r672 | # matplotlib.pyplot.ion() | |
|
r706 | ||
|
r207 | return | |
|
r206 | ||
|
r209 | def saveFigure(fig, filename): | |
|
r244 | ||
|
r672 | # matplotlib.pyplot.ioff() | |
|
r209 | fig.savefig(filename) | |
|
r672 | # matplotlib.pyplot.ion() | |
|
r209 | ||
|
r760 | def clearFigure(fig): | |
fig.clf() | |||
|
r201 | def setWinTitle(fig, title): | |
fig.canvas.manager.set_window_title(title) | |||
def setTitle(fig, title): | |||
fig.suptitle(title) | |||
|
r502 | def createAxes(fig, nrow, ncol, xpos, ypos, colspan, rowspan, polar=False): | |
|
r201 | ||
|
r244 | matplotlib.pyplot.ioff() | |
|
r201 | matplotlib.pyplot.figure(fig.number) | |
axes = matplotlib.pyplot.subplot2grid((nrow, ncol), | |||
(xpos, ypos), | |||
colspan=colspan, | |||
|
r502 | rowspan=rowspan, | |
polar=polar) | |||
|
r244 | ||
matplotlib.pyplot.ion() | |||
|
r201 | 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) | |||
|
r501 | ax.set_title(title, size=8) | |
|
r201 | ||
|
r204 | def createPline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', | |
ticksize=9, xtick_visible=True, ytick_visible=True, | |||
nxticks=4, nyticks=10, | |||
|
r474 | grid=None,color='blue'): | |
|
r201 | ||
|
r204 | """ | |
Input: | |||
grid : None, 'both', 'x', 'y' | |||
""" | |||
|
r244 | ||
matplotlib.pyplot.ioff() | |||
|
r201 | ax.set_xlim([xmin,xmax]) | |
ax.set_ylim([ymin,ymax]) | |||
printLabels(ax, xlabel, ylabel, title) | |||
|
r204 | ###################################################### | |
|
r371 | 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: | |||
|
r399 | xtickspos = numpy.arange(nxticks)*int((xmax-xmin)/(nxticks)) + int(xmin) | |
# xtickspos = numpy.arange(nxticks)*float(xmax-xmin)/float(nxticks) + int(xmin) | |||
|
r371 | 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) | |||
|
r204 | ||
###################################################### | |||
for tick in ax.get_yticklabels(): | |||
tick.set_visible(ytick_visible) | |||
for tick in ax.yaxis.get_major_ticks(): | |||
tick.label.set_fontsize(ticksize) | |||
|
r244 | ||
|
r474 | ax.plot(x, y, color=color) | |
|
r212 | iplot = ax.lines[-1] | |
|
r204 | ||
###################################################### | |||
|
r212 | 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 | |||
|
r204 | if grid != None: | |
ax.grid(b=True, which='major', axis=grid) | |||
|
r201 | matplotlib.pyplot.tight_layout() | |
|
r244 | matplotlib.pyplot.ion() | |
|
r201 | return iplot | |
|
r244 | def set_linedata(ax, x, y, idline): | |
ax.lines[idline].set_data(x,y) | |||
|
r201 | def pline(iplot, x, y, xlabel='', ylabel='', title=''): | |
ax = iplot.get_axes() | |||
printLabels(ax, xlabel, ylabel, title) | |||
|
r239 | set_linedata(ax, x, y, idline=0) | |
def addpline(ax, x, y, color, linestyle, lw): | |||
|
r244 | ||
|
r239 | ax.plot(x,y,color=color,linestyle=linestyle,lw=lw) | |
|
r244 | ||
def createPcolor(ax, x, y, z, xmin, xmax, ymin, ymax, zmin, zmax, | |||
xlabel='', ylabel='', title='', ticksize = 9, | |||
colormap='jet',cblabel='', cbsize="5%", | |||
XAxisAsTime=False): | |||
|
r239 | ||
|
r244 | matplotlib.pyplot.ioff() | |
|
r239 | ||
|
r244 | 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) | |||
imesh = ax.pcolormesh(x,y,z.T, vmin=zmin, vmax=zmax, cmap=matplotlib.pyplot.get_cmap(colormap)) | |||
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: | |||
func = lambda x, pos: ('%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.get_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) | |||
|
r318 | 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]) | |||
|
r254 | ||
ax.pcolormesh(x,y,z.T,vmin=zmin,vmax=zmax, cmap=matplotlib.pyplot.get_cmap(colormap)) | |||
|
r229 | ||
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' | |||
""" | |||
|
r244 | ||
matplotlib.pyplot.ioff() | |||
|
r229 | lines = ax.plot(x.T, y) | |
|
r240 | leg = ax.legend(lines, legendlabels, loc='upper right') | |
|
r229 | 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() | |||
|
r244 | ||
matplotlib.pyplot.ion() | |||
|
r229 | return iplot | |
def pmultiline(iplot, x, y, xlabel='', ylabel='', title=''): | |||
ax = iplot.get_axes() | |||
printLabels(ax, xlabel, ylabel, title) | |||
|
r201 | ||
|
r229 | for i in range(len(ax.lines)): | |
line = ax.lines[i] | |||
line.set_data(x[i,:],y) | |||
|
r240 | ||
def createPmultilineYAxis(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', legendlabels=None, | |||
ticksize=9, xtick_visible=True, ytick_visible=True, | |||
|
r349 | nxticks=4, nyticks=10, marker='.', markersize=10, linestyle="None", | |
|
r240 | grid=None, XAxisAsTime=False): | |
""" | |||
Input: | |||
grid : None, 'both', 'x', 'y' | |||
""" | |||
|
r244 | matplotlib.pyplot.ioff() | |
|
r337 | # lines = ax.plot(x, y.T, marker=marker,markersize=markersize,linestyle=linestyle) | |
|
r513 | lines = ax.plot(x, y.T, linestyle=linestyle, marker=marker, markersize=markersize) | |
|
r246 | leg = ax.legend(lines, legendlabels, loc='upper left', bbox_to_anchor=(1.01, 1.00), numpoints=1, handlelength=1.5, \ | |
handletextpad=0.5, borderpad=0.5, labelspacing=0.5, borderaxespad=0.) | |||
for label in leg.get_texts(): label.set_fontsize(9) | |||
|
r240 | ||
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: | |||
func = lambda x, pos: ('%s') %(datetime.datetime.utcfromtimestamp(x).strftime("%H:%M:%S")) | |||
ax.xaxis.set_major_formatter(FuncFormatter(func)) | |||
ax.xaxis.set_major_locator(LinearLocator(7)) | |||
|
r244 | matplotlib.pyplot.ion() | |
|
r240 | return iplot | |
|
r246 | def pmultilineyaxis(iplot, x, y, xlabel='', ylabel='', title=''): | |
|
r240 | ||
ax = iplot.get_axes() | |||
printLabels(ax, xlabel, ylabel, title) | |||
for i in range(len(ax.lines)): | |||
line = ax.lines[i] | |||
line.set_data(x,y[i,:]) | |||
|
r502 | ||
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)) | |||
|
r608 | # 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') | |||
|
r502 | # ax.text(100, 100, 'example', ha='left', va='center', rotation='vertical') | |
|
r608 | ax.yaxis.labelpad = 230 | |
printLabels(ax, xlabel, ylabel, title) | |||
|
r502 | 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.get_axes() | |||
# ax.text(0, -110, ylabel, rotation='vertical', va ='center', ha = 'center',size='11') | |||
|
r608 | printLabels(ax, xlabel, ylabel, title) | |
|
r502 | ||
set_linedata(ax, x, y, idline=0) | |||
|
r207 | ||
|
r201 | def draw(fig): | |
if type(fig) == 'int': | |||
|
r587 | raise ValueError, "Error drawing: Fig parameter should be a matplotlib figure object figure" | |
|
r201 | ||
|
r404 | fig.canvas.draw() | |
|
r617 | ||
def pause(interval=0.000001): | |||
matplotlib.pyplot.pause(interval) | |||