Coverage for /opt/obspy/update-docs/src/obspy/obspy/imaging/spectrogram : 76%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# -*- coding: utf-8 -*- #------------------------------------------------------------------- # Filename: spectrogram.py # Purpose: Plotting spectrogram of Seismograms. # Author: Christian Sippl, Moritz Beyreuther # Email: sippl@geophysik.uni-muenchen.de # # Copyright (C) 2008-2012 Christian Sippl #--------------------------------------------------------------------- Plotting spectrogram of seismograms.
:copyright: The ObsPy Development Team (devs@obspy.org) :license: GNU General Public License (GPL) (http://www.gnu.org/licenses/gpl.txt) """
""" Find power of two nearest to x
>>> _nearestPow2(3) 2.0 >>> _nearestPow2(15) 16.0
:type x: Float :param x: Number :rtype: Int :return: Nearest power of 2 to x """ else:
outfile=None, fmt=None, axes=None, dbscale=False, mult=8.0, cmap=None, zorder=None, title=None, show=True, sphinx=False, clip=[0.0, 1.0]): """ Computes and plots spectrogram of the input data.
:param data: Input data :type samp_rate: float :param samp_rate: Samplerate in Hz :type per_lap: float :param per_lap: Percentage of overlap of sliding window, ranging from 0 to 1. High overlaps take a long time to compute. :type wlen: int or float :param wlen: Window length for fft in seconds. If this parameter is too small, the calculation will take forever. :type log: bool :param log: Logarithmic frequency axis if True, linear frequency axis otherwise. :type outfile: String :param outfile: String for the filename of output file, if None interactive plotting is activated. :type fmt: String :param fmt: Format of image to save :type axes: :class:`matplotlib.axes.Axes` :param axes: Plot into given axes, this deactivates the fmt and outfile option. :type dbscale: bool :param dbscale: If True 10 * log10 of color values is taken, if False the sqrt is taken. :type mult: float :param mult: Pad zeros to lengh mult * wlen. This will make the spectrogram smoother. Available for matplotlib > 0.99.0. :type cmap: :class:`matplotlib.colors.Colormap` :param cmap: Specify a custom colormap instance :type zorder: float :param zorder: Specify the zorder of the plot. Only of importance if other plots in the same axes are executed. :type title: String :param title: Set the plot title :type show: bool :param show: Do not call `plt.show()` at end of routine. That way, further modifications can be done to the figure before showing it. :type sphinx: bool :param sphinx: Internal flag used for API doc generation, default False :type clip: [float, float] :param clip: adjust colormap to clip at lower and/or upper end. The given percentages of the amplitude range (linear or logarithmic depending on option `dbscale`) are clipped. """ # enforce float for samp_rate
# set wlen from samp_rate if not specified otherwise
# nfft needs to be an integer, otherwise a deprecation will be raised #XXX add condition for too many windows => calculation takes for ever
# Here we call not plt.specgram as this already produces a plot # matplotlib.mlab.specgram should be faster as it computes only the # arrays # XXX mlab.specgram uses fft, would be better and faster use rfft pad_to=mult, noverlap=nlap) else: specgram, freq, time = mlab.specgram(data, Fs=samp_rate, NFFT=nfft, noverlap=nlap) # db scale and remove zero/offset for amplitude specgram = 10 * np.log10(specgram[1:, :]) else:
msg = "Invalid parameters for clip option." raise ValueError(msg)
else: ax = axes
# calculate half bin width
# pcolor expects one bin more at the right end freq = np.concatenate((freq, [freq[-1] + 2 * halfbin_freq])) time = np.concatenate((time, [time[-1] + 2 * halfbin_time])) # center bin time -= halfbin_time freq -= halfbin_freq # pcolormesh issue was fixed in matplotlib r5716 (2008-07-07) # inbetween tags 0.98.2 and 0.98.3 # see: # - http://matplotlib.svn.sourceforge.net/viewvc/... # matplotlib?revision=5716&view=revision # - http://matplotlib.sourceforge.net/_static/CHANGELOG if MATPLOTLIB_VERSION >= [0, 98, 3]: # Log scaling for frequency values (y-axis) ax.set_yscale('log') # Plot times ax.pcolormesh(time, freq, specgram, cmap=cmap, zorder=zorder, norm=norm) else: X, Y = np.meshgrid(time, freq) ax.pcolor(X, Y, specgram, cmap=cmap, zorder=zorder, norm=norm) ax.semilogy() else: # this method is much much faster! # center bin freq[0] - halfbin_freq, freq[-1] + halfbin_freq) cmap=cmap, zorder=zorder)
# set correct way of axis, whitespace before and after with window # length
return ax
# ignoring all NumPy warnings during plot if fmt: fig.savefig(outfile, format=fmt) else: fig.savefig(outfile) plt.show() else: |