Source code for brian2hears.plotting

import numpy as np
import matplotlib.pyplot as plt

from brian2 import Hz, kHz

from .erb import *

__all__ = ['log_frequency_xaxis_labels', 'log_frequency_yaxis_labels']


[docs]def log_frequency_xaxis_labels(ax=None, freqs=None): ''' Sets tick positions for log-scale frequency x-axis at sensible locations. Also uses scalar representation rather than exponential (i.e. 100 rather than 10^2). ``ax=None`` The axis to set, or uses ``gca()`` if ``None``. ``freqs=None`` Override the default frequency locations with your preferred tick locations. See also: :func:`log_frequency_yaxis_labels`. Note: with log scaled axes, it can be useful to call ``axis('tight')`` before setting the ticks. ''' if ax is None: ax = plt.gca() return log_frequency_axis_labels(ax.xaxis, freqs=freqs)
[docs]def log_frequency_yaxis_labels(ax=None, freqs=None): ''' Sets tick positions for log-scale frequency x-axis at sensible locations. Also uses scalar representation rather than exponential (i.e. 100 rather than 10^2). ``ax=None`` The axis to set, or uses ``gca()`` if ``None``. ``freqs=None`` Override the default frequency locations with your preferred tick locations. See also: :func:`log_frequency_yaxis_labels`. Note: with log scaled axes, it can be useful to call ``axis('tight')`` before setting the ticks. ''' if ax is None: ax = plt.gca() return log_frequency_axis_labels(ax.yaxis, freqs=freqs)
def log_frequency_axis_labels(ax, freqs=None): if freqs is not None: ax.set_major_locator(plt.FixedLocator(freqs)) ax.set_major_formatter(plt.ScalarFormatter()) ax.set_minor_locator(plt.NullLocator()) return xmin, xmax = ax.get_view_interval() # we use the first of these ranges that the data fits within allowed_ranges = [[1, 2, 4, 8, 16, 32, 64], [50, 75, 100, 150, 200, 300, 400], [10, 20, 40, 80, 160, 320], [1, 2, 4, 8, 16, 32, 64, 100, 200, 400, 800], [125, 250, 500, 1000, 2000, 4000, 8000, 16000], [100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000], ] found = False for R in allowed_ranges: if xmin>=np.amin(R)*0.9999 and xmax<=np.amax(R)*1.0001: found = True break if not found: ax.set_major_locator(plt.LogLocator(base=2)) else: ax.set_major_locator(plt.FixedLocator(R)) ax.set_major_formatter(plt.ScalarFormatter()) ax.set_minor_locator(plt.NullLocator()) if __name__=='__main__': for i, cfs in enumerate([erbspace(150*Hz, 5*kHz, 100), erbspace(2*Hz, 64*Hz, 100), erbspace(100*Hz, 10*kHz, 100), erbspace(100*Hz, 400*Hz, 100), ]): plt.subplot(2, 2, i+1) #cfs = erbspace(150*Hz, 5*kHz, 100) plt.semilogx(cfs, 1-((np.arange(len(cfs))-len(cfs)/2.0)/(len(cfs)/2.0))**2) plt.axis('tight') log_frequency_xaxis_labels() plt.show()