def image_data(Z, X=[0, 1.0], Y=[0, 1.0], aspect=1.0, zmin=None, zmax=None, clear=1, title='', clabel='z', autoformat=True, colormap="Last Used", shell_history=1, **kwargs): """ Generates an image or 3d plot X 1-d array of x-values Y 1-d array of y-values Z 2-d array of z-values X and Y can be something like [0,2] or an array of X-values kwargs are sent to pylab.imshow() """ global _colormap _pylab.ioff() fig = _pylab.gcf() if clear: fig.clear() _pylab.axes() # generate the 3d axes X = _n.array(X) Y = _n.array(Y) Z = _n.array(Z) # assume X and Y are the bin centers and figure out the bin widths x_width = abs(float(X[-1] - X[0]) / (len(Z[0]) - 1)) y_width = abs(float(Y[-1] - Y[0]) / (len(Z) - 1)) # reverse the Z's Z = Z[-1::-1] # get rid of the label and title kwargs xlabel = '' ylabel = '' title = '' if kwargs.has_key('xlabel'): xlabel = kwargs.pop('xlabel') if kwargs.has_key('ylabel'): ylabel = kwargs.pop('ylabel') if kwargs.has_key('title'): title = kwargs.pop('title') _pylab.imshow(Z, extent=[ X[0] - x_width / 2.0, X[-1] + x_width / 2.0, Y[0] - y_width / 2.0, Y[-1] + y_width / 2.0 ], **kwargs) cb = _pylab.colorbar() _pt.image_set_clim(zmin, zmax) _pt.image_set_aspect(aspect) cb.set_label(clabel) a = _pylab.gca() a.set_xlabel(xlabel) a.set_ylabel(ylabel) #_pt.close_sliders() #_pt.image_sliders() # title history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() a.set_title(title.strip()) if autoformat: _pt.image_format_figure(fig) _pylab.ion() _pylab.show() #_pt.raise_figure_window() #_pt.raise_pyshell() _pylab.draw() # add the color sliders if colormap: if _colormap: _colormap.close() _colormap = _pt.image_colormap(colormap, image=a.images[0])
def image_data(Z, X=[0,1.0], Y=[0,1.0], aspect=1.0, zmin=None, zmax=None, clear=1, clabel='z', autoformat=True, colormap="Last Used", shell_history=1, **kwargs): """ Generates an image or 3d plot X 1-d array of x-values Y 1-d array of y-values Z 2-d array of z-values X and Y can be something like [0,2] or an array of X-values kwargs are sent to pylab.imshow() """ global _colormap _pylab.ioff() fig = _pylab.gcf() if clear: fig.clear() _pylab.axes() # generate the 3d axes X = _n.array(X) Y = _n.array(Y) Z = _n.array(Z) # assume X and Y are the bin centers and figure out the bin widths x_width = abs(float(X[-1] - X[0])/(len(Z[0])-1)) y_width = abs(float(Y[-1] - Y[0])/(len(Z)-1)) # reverse the Z's Z = Z[-1::-1] # get rid of the label and title kwargs xlabel='' ylabel='' title ='' if kwargs.has_key('xlabel'): xlabel = kwargs.pop('xlabel') if kwargs.has_key('ylabel'): ylabel = kwargs.pop('ylabel') if kwargs.has_key('title'): title = kwargs.pop('title') _pylab.imshow(Z, extent=[X[0]-x_width/2.0, X[-1]+x_width/2.0, Y[0]-y_width/2.0, Y[-1]+y_width/2.0], **kwargs) cb = _pylab.colorbar() _pt.image_set_clim(zmin,zmax) _pt.image_set_aspect(aspect) cb.set_label(clabel) a = _pylab.gca() a.set_xlabel(xlabel) a.set_ylabel(ylabel) #_pt.close_sliders() #_pt.image_sliders() # title history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() a.set_title(title.strip()) if autoformat: _pt.image_format_figure(fig) _pylab.ion() _pylab.show() #_pt.raise_figure_window() #_pt.raise_pyshell() _pylab.draw() # add the color sliders if colormap: if _colormap: _colormap.close() _colormap = _pt.image_colormap(colormap, image=a.images[0])
def xy_data(xdata, ydata, eydata=None, exdata=None, label=None, xlabel='', ylabel='', \ title='', shell_history=1, xshift=0, yshift=0, xshift_every=1, yshift_every=1, \ coarsen=0, style=None, clear=True, axes=None, xscale='linear', yscale='linear', grid=False, \ legend='best', legend_max=20, autoformat=True, tall=False, draw=True, **kwargs): """ Plots specified data. xdata, ydata Arrays (or arrays of arrays) of data to plot eydata, exdata Arrays of x and y errorbar values label string or array of strings for the line labels xlabel='' label for the x-axis ylabel='' label for the y-axis title='' title for the axes; set to None to have nothing. shell_history=1 how many commands from the pyshell history to include with the title xshift=0, yshift=0 progressive shifts on the data, to make waterfall plots xshift_every=1 perform the progressive shift every 1 or n'th line. yshift_every=1 perform the progressive shift every 1 or n'th line. style style cycle object. clear=True if no axes are specified, clear the figure, otherwise clear just the axes. axes=None which axes to use, or "gca" for the current axes xscale,yscale 'linear' by default. Set either to 'log' for log axes grid=False Should we draw a grid on the axes? legend='best' where to place the legend (see pylab.legend()) Set this to None to ignore the legend. legend_max=20 number of legend entries before it's truncated with '...' autoformat=True Should we format the figure for printing? False Should the format be tall? draw=True whether or not to draw the plot after plotting **kwargs are sent to pylab.errorbar() """ _pylab.ioff() # make sure everything is at least iterable. if not _fun.is_iterable(xdata): xdata = [xdata] if not _fun.is_iterable(exdata): exdata = [exdata] if not _fun.is_iterable(ydata): ydata = [ydata] if not _fun.is_iterable(eydata): eydata = [eydata] # make sure at least xdata and ydata are 2-D if _fun.is_a_number(xdata[0]): xdata = [xdata] if _fun.is_a_number(ydata[0]): ydata = [ydata] # make sure the number of data sets agrees N = max(len(xdata), len(ydata)) for n in range(N - len(xdata)): xdata.append(xdata[0]) for n in range(N - len(ydata)): ydata.append(ydata[0]) for n in range(N - len(exdata)): exdata.append(exdata[0]) for n in range(N - len(eydata)): eydata.append(eydata[0]) # loop over each x and y data set, making sure None's are all converted # to counting arrays for n in range(N): # clean up the [None]'s if _fun.is_iterable(xdata[n]) and xdata[n][0] == None: xdata[n] = None if _fun.is_iterable(ydata[n]) and ydata[n][0] == None: ydata[n] = None if xdata[n] == None and ydata[n] == None: print "ERROR: " + str(n) + "'th data set is (None, None)." return if xdata[n] == None: xdata[n] = _n.arange(len(ydata[n])) if ydata[n] == None: ydata[n] = _n.arange(len(xdata[n])) # check that the labels is a list of strings of the same length if not _fun.is_iterable(label): label = [label] * N while len(label) < len(ydata): label.append(label[0]) # concatenate if necessary if len(label) > legend_max: label[legend_max - 2] = '...' for n in range(legend_max - 1, len(label) - 1): label[n] = "_nolegend_" # clear the figure? if clear and not axes: _pylab.gcf().clear() # axes cleared later # setup axes if axes == "gca" or axes == None: axes = _pylab.gca() # if we're clearing the axes if clear: axes.clear() # set the current axes _pylab.axes(axes) # now loop over the list of data in xdata and ydata for n in range(0, len(xdata)): # get the label if label: l = str(label[n]) else: l = str(n) # calculate the x an y progressive shifts dx = xshift * (n / xshift_every) dy = yshift * (n / yshift_every) # if we're supposed to coarsen the data, do so. x = _fun.coarsen_array(xdata[n], coarsen) y = _fun.coarsen_array(ydata[n], coarsen) ey = _fun.coarsen_array(eydata[n], coarsen, 'quadrature') ex = _fun.coarsen_array(exdata[n], coarsen, 'quadrature') # update the style if not style == None: kwargs.update(style.next()) axes.errorbar(x + dx, y + dy, label=l, yerr=ey, xerr=ex, **kwargs) _pylab.xscale(xscale) _pylab.yscale(yscale) if legend: axes.legend(loc=legend) axes.set_xlabel(xlabel) axes.set_ylabel(ylabel) # for some arguments there should be no title. if title in [None, False, 0]: axes.set_title('') # add the commands to the title else: title = str(title) history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() axes.set_title(title) if grid: _pylab.grid(True) if autoformat: _pt.format_figure(draw=False) _pt.auto_zoom(axes=axes, draw=False) # update the canvas if draw: _pylab.ion() _pylab.draw() _pylab.show() return axes
def xy_data(xdata, ydata, eydata=None, exdata=None, label=None, xlabel='', ylabel='', \ title='', shell_history=1, xshift=0, yshift=0, xshift_every=1, yshift_every=1, \ coarsen=0, style=None, clear=True, axes=None, xscale='linear', yscale='linear', grid=False, \ legend='best', legend_max=20, autoformat=True, tall=False, draw=True, **kwargs): """ Plots specified data. xdata, ydata Arrays (or arrays of arrays) of data to plot eydata, exdata Arrays of x and y errorbar values label string or array of strings for the line labels xlabel='' label for the x-axis ylabel='' label for the y-axis title='' title for the axes; set to None to have nothing. shell_history=1 how many commands from the pyshell history to include with the title xshift=0, yshift=0 progressive shifts on the data, to make waterfall plots xshift_every=1 perform the progressive shift every 1 or n'th line. yshift_every=1 perform the progressive shift every 1 or n'th line. style style cycle object. clear=True if no axes are specified, clear the figure, otherwise clear just the axes. axes=None which axes to use, or "gca" for the current axes xscale,yscale 'linear' by default. Set either to 'log' for log axes grid=False Should we draw a grid on the axes? legend='best' where to place the legend (see pylab.legend()) Set this to None to ignore the legend. legend_max=20 number of legend entries before it's truncated with '...' autoformat=True Should we format the figure for printing? False Should the format be tall? draw=True whether or not to draw the plot after plotting **kwargs are sent to pylab.errorbar() """ _pylab.ioff() # make sure everything is at least iterable. if not _fun.is_iterable(xdata): xdata = [xdata] if not _fun.is_iterable(exdata): exdata = [exdata] if not _fun.is_iterable(ydata): ydata = [ydata] if not _fun.is_iterable(eydata): eydata = [eydata] # make sure at least xdata and ydata are 2-D if _fun.is_a_number(xdata[0]): xdata = [xdata] if _fun.is_a_number(ydata[0]): ydata = [ydata] # make sure the number of data sets agrees N = max(len(xdata),len(ydata)) for n in range(N-len( xdata)): xdata.append( xdata[0]) for n in range(N-len( ydata)): ydata.append( ydata[0]) for n in range(N-len(exdata)): exdata.append(exdata[0]) for n in range(N-len(eydata)): eydata.append(eydata[0]) # loop over each x and y data set, making sure None's are all converted # to counting arrays for n in range(N): # clean up the [None]'s if _fun.is_iterable(xdata[n]) and xdata[n][0] is None: xdata[n] = None if _fun.is_iterable(ydata[n]) and ydata[n][0] is None: ydata[n] = None if xdata[n] is None and ydata[n] is None: print "ERROR: "+str(n)+"'th data set is (None, None)." return if xdata[n] is None: xdata[n] = _n.arange(len(ydata[n])) if ydata[n] is None: ydata[n] = _n.arange(len(xdata[n])) # check that the labels is a list of strings of the same length if not _fun.is_iterable(label): label = [label]*N while len(label) < len(ydata): label.append(label[0]) # concatenate if necessary if len(label) > legend_max: label[legend_max-2] = '...' for n in range(legend_max-1,len(label)-1): label[n] = "_nolegend_" # clear the figure? if clear and not axes: _pylab.gcf().clear() # axes cleared later # setup axes if axes=="gca" or axes is None: axes = _pylab.gca() # if we're clearing the axes if clear: axes.clear() # set the current axes _pylab.axes(axes) # now loop over the list of data in xdata and ydata for n in range(0,len(xdata)): # get the label if label: l = str(label[n]) else: l = str(n) # calculate the x an y progressive shifts dx = xshift*(n/xshift_every) dy = yshift*(n/yshift_every) # if we're supposed to coarsen the data, do so. x = _fun.coarsen_array(xdata[n], coarsen) y = _fun.coarsen_array(ydata[n], coarsen) ey = _fun.coarsen_array(eydata[n], coarsen, 'quadrature') ex = _fun.coarsen_array(exdata[n], coarsen, 'quadrature') # update the style if not style is None: kwargs.update(style.next()) axes.errorbar(x+dx, y+dy, label=l, yerr=ey, xerr=ex, **kwargs) _pylab.xscale(xscale) _pylab.yscale(yscale) if legend: axes.legend(loc=legend) axes.set_xlabel(xlabel) axes.set_ylabel(ylabel) # for some arguments there should be no title. if title in [None, False, 0]: axes.set_title('') # add the commands to the title else: title = str(title) history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() axes.set_title(title) if grid: _pylab.grid(True) if autoformat: _pt.format_figure(draw=False) _pt.auto_zoom(axes=axes, draw=False) # update the canvas if draw: _pylab.ion() _pylab.draw() _pylab.show() return axes
def xy_data(xdata, ydata, eydata=None, exdata=None, label=None, xlabel='', ylabel='', \ title='', shell_history=0, xshift=0, yshift=0, xshift_every=1, yshift_every=1, \ coarsen=0, style=None, clear=True, axes=None, xscale='linear', yscale='linear', grid=False, \ legend='best', legend_max=20, autoformat=True, autoformat_window=True, tall=False, draw=True, **kwargs): """ Plots specified data. Parameters ---------- xdata, ydata Arrays (or arrays of arrays) of data to plot eydata=None, exdata=None Arrays of x and y errorbar values label=None String or array of strings for the line labels xlabel='' Label for the x-axis ylabel='' Label for the y-axis title='' Title for the axes; set to None to have nothing. shell_history=0 How many commands from the pyshell history to include with the title xshift=0, yshift=0 Progressive shifts on the data, to make waterfall plots xshift_every=1 Perform the progressive shift every 1 or n'th line. yshift_every=1 perform the progressive shift every 1 or n'th line. style=None style cycle object. clear=True If no axes are specified (see below), clear the figure, otherwise clear just the axes. axes=None Which matplotlib axes to use, or "gca" for the current axes xscale='linear', yscale='linear' 'linear' or 'log' x and y axis scales. grid=False Should we draw a grid on the axes? legend='best' Where to place the legend (see pylab.legend() for options) Set this to None to ignore the legend. legend_max=20 Number of legend entries before it's truncated with '...' autoformat=True Should we format the figure for printing? autoformat_window=True Should we resize and reposition the window when autoformatting? tall=False Should the format be tall? draw=True Whether or not to draw the plot after plotting. See matplotlib's errorbar() function for additional optional keyword arguments. """ _pylab.ioff() # Make sure the dimensionality of the data sets matches xdata, ydata = _match_data_sets(xdata, ydata) exdata = _match_error_to_data_set(xdata, exdata) eydata = _match_error_to_data_set(ydata, eydata) # check that the labels is a list of strings of the same length if not _fun.is_iterable(label): label = [label] * len(xdata) while len(label) < len(ydata): label.append(label[0]) # concatenate if necessary if len(label) > legend_max: label[legend_max - 2] = '...' for n in range(legend_max - 1, len(label) - 1): label[n] = "_nolegend_" # clear the figure? if clear and not axes: _pylab.gcf().clear() # axes cleared later # setup axes if axes == "gca" or axes is None: axes = _pylab.gca() # if we're clearing the axes if clear: axes.clear() # set the current axes _pylab.axes(axes) # now loop over the list of data in xdata and ydata for n in range(0, len(xdata)): # get the label l = str(n) + ": " + str(label[n]) # calculate the x an y progressive shifts dx = xshift * (n / xshift_every) dy = yshift * (n / yshift_every) # if we're supposed to coarsen the data, do so. x = _fun.coarsen_array(xdata[n], coarsen) y = _fun.coarsen_array(ydata[n], coarsen) ey = _fun.coarsen_array(eydata[n], coarsen, 'quadrature') ex = _fun.coarsen_array(exdata[n], coarsen, 'quadrature') # update the style if not style is None: kwargs.update(next(style)) axes.errorbar(x + dx, y + dy, label=l, yerr=ey, xerr=ex, **kwargs) _pylab.xscale(xscale) _pylab.yscale(yscale) if legend: axes.legend(loc=legend) axes.set_xlabel(xlabel) axes.set_ylabel(ylabel) # for some arguments there should be no title. if title in [None, False, 0]: axes.set_title('') # add the commands to the title else: title = str(title) history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() axes.set_title(title) if grid: _pylab.grid(True) if autoformat: _pt.format_figure(draw=False, modify_geometry=autoformat_window) _pt.auto_zoom(axes=axes, draw=False) # update the canvas if draw: _pylab.ion() _pylab.draw() _pylab.show() return axes
def xy_data(xdata, ydata, eydata=None, exdata=None, label=None, xlabel='', ylabel='', \ title='', shell_history=0, xshift=0, yshift=0, xshift_every=1, yshift_every=1, \ coarsen=0, style=None, clear=True, axes=None, xscale='linear', yscale='linear', grid=False, \ legend='best', legend_max=20, autoformat=True, autoformat_window=True, tall=False, draw=True, **kwargs): """ Plots specified data. Parameters ---------- xdata, ydata Arrays (or arrays of arrays) of data to plot eydata=None, exdata=None Arrays of x and y errorbar values label=None String or array of strings for the line labels xlabel='' Label for the x-axis ylabel='' Label for the y-axis title='' Title for the axes; set to None to have nothing. shell_history=0 How many commands from the pyshell history to include with the title xshift=0, yshift=0 Progressive shifts on the data, to make waterfall plots xshift_every=1 Perform the progressive shift every 1 or n'th line. yshift_every=1 perform the progressive shift every 1 or n'th line. style=None style cycle object. clear=True If no axes are specified (see below), clear the figure, otherwise clear just the axes. axes=None Which matplotlib axes to use, or "gca" for the current axes xscale='linear', yscale='linear' 'linear' or 'log' x and y axis scales. grid=False Should we draw a grid on the axes? legend='best' Where to place the legend (see pylab.legend() for options) Set this to None to ignore the legend. legend_max=20 Number of legend entries before it's truncated with '...' autoformat=True Should we format the figure for printing? autoformat_window=True Should we resize and reposition the window when autoformatting? tall=False Should the format be tall? draw=True Whether or not to draw the plot after plotting. See matplotlib's errorbar() function for additional optional keyword arguments. """ _pylab.ioff() # Make sure the dimensionality of the data sets matches xdata, ydata = _match_data_sets(xdata, ydata) exdata = _match_error_to_data_set(xdata, exdata) eydata = _match_error_to_data_set(ydata, eydata) # check that the labels is a list of strings of the same length if not _fun.is_iterable(label): label = [label]*len(xdata) while len(label) < len(ydata): label.append(label[0]) # concatenate if necessary if len(label) > legend_max: label[legend_max-2] = '...' for n in range(legend_max-1,len(label)-1): label[n] = "_nolegend_" # clear the figure? if clear and not axes: _pylab.gcf().clear() # axes cleared later # setup axes if axes=="gca" or axes is None: axes = _pylab.gca() # if we're clearing the axes if clear: axes.clear() # set the current axes _pylab.axes(axes) # now loop over the list of data in xdata and ydata for n in range(0,len(xdata)): # get the label if label[n]=='_nolegend_': l = '_nolegend_' else: l = str(n)+": "+str(label[n]) # calculate the x an y progressive shifts dx = xshift*(n/xshift_every) dy = yshift*(n/yshift_every) # if we're supposed to coarsen the data, do so. x = _fun.coarsen_array(xdata[n], coarsen) y = _fun.coarsen_array(ydata[n], coarsen) ey = _fun.coarsen_array(eydata[n], coarsen, 'quadrature') ex = _fun.coarsen_array(exdata[n], coarsen, 'quadrature') # update the style if not style is None: kwargs.update(next(style)) axes.errorbar(x+dx, y+dy, label=l, yerr=ey, xerr=ex, **kwargs) _pylab.xscale(xscale) _pylab.yscale(yscale) if legend: axes.legend(loc=legend) axes.set_xlabel(xlabel) axes.set_ylabel(ylabel) # for some arguments there should be no title. if title in [None, False, 0]: axes.set_title('') # add the commands to the title else: title = str(title) history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() axes.set_title(title) if grid: _pylab.grid(True) if autoformat: _pt.format_figure(draw=False, modify_geometry=autoformat_window) _pt.auto_zoom(axes=axes, draw=False) # update the canvas if draw: _pylab.ion() _pylab.draw() _pylab.show() return axes
def image_data(Z, X=[0,1.0], Y=[0,1.0], aspect=1.0, zmin=None, zmax=None, clear=1, clabel='z', autoformat=True, colormap="Last Used", shell_history=0, **kwargs): """ Generates an image plot. Parameters ---------- Z 2-d array of z-values X=[0,1.0], Y=[0,1.0] 1-d array of x-values (only the first and last element are used) See matplotlib's imshow() for additional optional arguments. """ global _colormap # Set interpolation to something more relevant for every day science if not 'interpolation' in kwargs.keys(): kwargs['interpolation'] = 'nearest' _pylab.ioff() fig = _pylab.gcf() if clear: fig.clear() _pylab.axes() # generate the 3d axes X = _n.array(X) Y = _n.array(Y) Z = _n.array(Z) # assume X and Y are the bin centers and figure out the bin widths x_width = abs(float(X[-1] - X[0])/(len(Z[0])-1)) y_width = abs(float(Y[-1] - Y[0])/(len(Z)-1)) # reverse the Z's # Transpose and reverse Z = Z.transpose() Z = Z[-1::-1] # get rid of the label and title kwargs xlabel='' ylabel='' title ='' if 'xlabel' in kwargs: xlabel = kwargs.pop('xlabel') if 'ylabel' in kwargs: ylabel = kwargs.pop('ylabel') if 'title' in kwargs: title = kwargs.pop('title') _pylab.imshow(Z, extent=[X[0]-x_width/2.0, X[-1]+x_width/2.0, Y[0]-y_width/2.0, Y[-1]+y_width/2.0], **kwargs) cb = _pylab.colorbar() _pt.image_set_clim(zmin,zmax) _pt.image_set_aspect(aspect) cb.set_label(clabel) a = _pylab.gca() a.set_xlabel(xlabel) a.set_ylabel(ylabel) #_pt.close_sliders() #_pt.image_sliders() # title history = _fun.get_shell_history() for n in range(0, min(shell_history, len(history))): title = title + "\n" + history[n].split('\n')[0].strip() title = title + '\nPlot created ' + _time.asctime() a.set_title(title.strip()) if autoformat: _pt.image_format_figure(fig) _pylab.ion() _pylab.show() #_pt.raise_figure_window() #_pt.raise_pyshell() _pylab.draw() # add the color sliders if colormap: if _colormap: _colormap.close() _colormap = _pt.image_colormap(colormap, image=a.images[0])