def test_plot(): """Test TFR plotting.""" import matplotlib matplotlib.use('Agg') # for testing don't use X server import matplotlib.pyplot as plt data = np.zeros((3, 2, 3)) times = np.array([.1, .2, .3]) freqs = np.array([.10, .20]) info = mne.create_info(['MEG 001', 'MEG 002', 'MEG 003'], 1000., ['mag', 'mag', 'mag']) tfr = AverageTFR(info, data=data, times=times, freqs=freqs, nave=20, comment='test', method='crazy-tfr') tfr.plot([1, 2], title='title') plt.close('all') ax = plt.subplot2grid((2, 2), (0, 0)) ax2 = plt.subplot2grid((2, 2), (1, 1)) ax3 = plt.subplot2grid((2, 2), (0, 1)) tfr.plot(picks=[0, 1, 2], axes=[ax, ax2, ax3]) plt.close('all') tfr.plot_topo() plt.close('all')
def test_plot_tfr_topo(): """Test plotting of TFR data.""" epochs = _get_epochs() n_freqs = 3 nave = 1 data = np.random.RandomState(0).randn(len(epochs.ch_names), n_freqs, len(epochs.times)) tfr = AverageTFR(epochs.info, data, epochs.times, np.arange(n_freqs), nave) plt.close('all') fig = tfr.plot_topo(baseline=(None, 0), mode='ratio', title='Average power', vmin=0., vmax=14.) # test opening tfr by clicking num_figures_before = len(plt.get_fignums()) # could use np.reshape(fig.axes[-1].images[0].get_extent(), (2, 2)).mean(1) with pytest.warns(None): # on old mpl (at least 2.0) there is a warning _fake_click(fig, fig.axes[0], (0.08, 0.65)) assert num_figures_before + 1 == len(plt.get_fignums()) plt.close('all') tfr.plot([4], baseline=(None, 0), mode='ratio', show=False, title='foo') pytest.raises(ValueError, tfr.plot, [4], yscale='lin', show=False) # nonuniform freqs freqs = np.logspace(*np.log10([3, 10]), num=3) tfr = AverageTFR(epochs.info, data, epochs.times, freqs, nave) fig = tfr.plot([4], baseline=(None, 0), mode='mean', vmax=14., show=False) assert fig.axes[0].get_yaxis().get_scale() == 'log' # one timesample tfr = AverageTFR(epochs.info, data[:, :, [0]], epochs.times[[1]], freqs, nave) with pytest.warns(None): # matplotlib equal left/right tfr.plot([4], baseline=None, vmax=14., show=False, yscale='linear') # one frequency bin, log scale required: as it doesn't make sense # to plot log scale for one value, we test whether yscale is set to linear vmin, vmax = 0., 2. fig, ax = plt.subplots() tmin, tmax = epochs.times[0], epochs.times[-1] with pytest.warns(RuntimeWarning, match='not masking'): _imshow_tfr(ax, 3, tmin, tmax, vmin, vmax, None, tfr=data[:, [0], :], freq=freqs[[-1]], x_label=None, y_label=None, colorbar=False, cmap=('RdBu_r', True), yscale='log') fig = plt.gcf() assert fig.axes[0].get_yaxis().get_scale() == 'linear' # ValueError when freq[0] == 0 and yscale == 'log' these_freqs = freqs[:3].copy() these_freqs[0] = 0 with pytest.warns(RuntimeWarning, match='not masking'): pytest.raises(ValueError, _imshow_tfr, ax, 3, tmin, tmax, vmin, vmax, None, tfr=data[:, :3, :], freq=these_freqs, x_label=None, y_label=None, colorbar=False, cmap=('RdBu_r', True), yscale='log')
def test_plot_tfr_topo(): """Test plotting of TFR data.""" epochs = _get_epochs() n_freqs = 3 nave = 1 data = np.random.RandomState(0).randn(len(epochs.ch_names), n_freqs, len(epochs.times)) tfr = AverageTFR(epochs.info, data, epochs.times, np.arange(n_freqs), nave) tfr.plot_topo(baseline=(None, 0), mode='ratio', title='Average power', vmin=0., vmax=14., show=False) tfr.plot([4], baseline=(None, 0), mode='ratio', show=False, title='foo')
def test_plot_tfr_topo(): """Test plotting of TFR data.""" import matplotlib.pyplot as plt epochs = _get_epochs() n_freqs = 3 nave = 1 data = np.random.RandomState(0).randn(len(epochs.ch_names), n_freqs, len(epochs.times)) tfr = AverageTFR(epochs.info, data, epochs.times, np.arange(n_freqs), nave) fig = tfr.plot_topo(baseline=(None, 0), mode='ratio', title='Average power', vmin=0., vmax=14.) # test opening tfr by clicking num_figures_before = len(plt.get_fignums()) _fake_click(fig, fig.axes[-1], (0.08, 0.65)) assert_equal(num_figures_before + 1, len(plt.get_fignums())) plt.close('all') tfr.plot([4], baseline=(None, 0), mode='ratio', show=False, title='foo') assert_raises(ValueError, tfr.plot, [4], yscale='lin', show=False) # nonuniform freqs freqs = np.logspace(*np.log10([3, 10]), num=3) tfr = AverageTFR(epochs.info, data, epochs.times, freqs, nave) fig = tfr.plot([4], baseline=(None, 0), mode='mean', vmax=14., show=False) assert_equal(fig.axes[0].get_yaxis().get_scale(), 'log') # one timesample tfr = AverageTFR(epochs.info, data[:, :, [0]], epochs.times[[1]], freqs, nave) tfr.plot([4], baseline=None, vmax=14., show=False, yscale='linear') # one freqency bin, log scale required: as it doesn't make sense # to plot log scale for one value, we test whether yscale is set to linear vmin, vmax = 0., 2. fig, ax = plt.subplots() tmin, tmax = epochs.times[0], epochs.times[-1] _imshow_tfr(ax, 3, tmin, tmax, vmin, vmax, None, tfr=data[:, [0], :], freq=freqs[[-1]], x_label=None, y_label=None, colorbar=False, cmap=('RdBu_r', True), yscale='log') fig = plt.gcf() assert_equal(fig.axes[0].get_yaxis().get_scale(), 'linear') # ValueError when freq[0] == 0 and yscale == 'log' these_freqs = freqs[:3].copy() these_freqs[0] = 0 assert_raises(ValueError, _imshow_tfr, ax, 3, tmin, tmax, vmin, vmax, None, tfr=data[:, :3, :], freq=these_freqs, x_label=None, y_label=None, colorbar=False, cmap=('RdBu_r', True), yscale='log')
def test_plot(): """Test TFR plotting.""" import matplotlib.pyplot as plt data = np.zeros((3, 2, 3)) times = np.array([.1, .2, .3]) freqs = np.array([.10, .20]) info = mne.create_info(['MEG 001', 'MEG 002', 'MEG 003'], 1000., ['mag', 'mag', 'mag']) tfr = AverageTFR(info, data=data, times=times, freqs=freqs, nave=20, comment='test', method='crazy-tfr') tfr.plot([1, 2], title='title', colorbar=False) plt.close('all') ax = plt.subplot2grid((2, 2), (0, 0)) ax2 = plt.subplot2grid((2, 2), (1, 1)) ax3 = plt.subplot2grid((2, 2), (0, 1)) tfr.plot(picks=[0, 1, 2], axes=[ax, ax2, ax3]) plt.close('all') tfr.plot_topo(picks=[1, 2]) plt.close('all') tfr.plot_topo(picks=[1, 2]) plt.close('all') fig = tfr.plot(picks=[1], cmap='RdBu_r') # interactive mode on by default fig.canvas.key_press_event('up') fig.canvas.key_press_event(' ') fig.canvas.key_press_event('down') cbar = fig.get_axes()[0].CB # Fake dragging with mouse. ax = cbar.cbar.ax _fake_click(fig, ax, (0.1, 0.1)) _fake_click(fig, ax, (0.1, 0.2), kind='motion') _fake_click(fig, ax, (0.1, 0.3), kind='release') _fake_click(fig, ax, (0.1, 0.1), button=3) _fake_click(fig, ax, (0.1, 0.2), button=3, kind='motion') _fake_click(fig, ax, (0.1, 0.3), kind='release') fig.canvas.scroll_event(0.5, 0.5, -0.5) # scroll down fig.canvas.scroll_event(0.5, 0.5, 0.5) # scroll up plt.close('all')
def test_plot(): """Test TFR plotting.""" data = np.zeros((3, 2, 3)) times = np.array([.1, .2, .3]) freqs = np.array([.10, .20]) info = mne.create_info(['MEG 001', 'MEG 002', 'MEG 003'], 1000., ['mag', 'mag', 'mag']) tfr = AverageTFR(info, data=data, times=times, freqs=freqs, nave=20, comment='test', method='crazy-tfr') # test title=auto, combine=None, and correct length of figure list picks = [1, 2] figs = tfr.plot(picks, title='auto', colorbar=False, mask=np.ones(tfr.data.shape[1:], bool)) assert len(figs) == len(picks) assert 'MEG' in figs[0].texts[0].get_text() plt.close('all') # test combine and title keyword figs = tfr.plot(picks, title='title', colorbar=False, combine='rms', mask=np.ones(tfr.data.shape[1:], bool)) assert len(figs) == 1 assert figs[0].texts[0].get_text() == 'title' figs = tfr.plot(picks, title='auto', colorbar=False, combine='mean', mask=np.ones(tfr.data.shape[1:], bool)) assert len(figs) == 1 assert figs[0].texts[0].get_text() == 'Mean of 2 sensors' with pytest.raises(ValueError, match='combine must be None'): tfr.plot(picks, colorbar=False, combine='something', mask=np.ones(tfr.data.shape[1:], bool)) plt.close('all') # test axes argument - first with list of axes ax = plt.subplot2grid((2, 2), (0, 0)) ax2 = plt.subplot2grid((2, 2), (0, 1)) ax3 = plt.subplot2grid((2, 2), (1, 0)) figs = tfr.plot(picks=[0, 1, 2], axes=[ax, ax2, ax3]) assert len(figs) == len([ax, ax2, ax3]) # and as a single axes figs = tfr.plot(picks=[0], axes=ax) assert len(figs) == 1 plt.close('all') # and invalid inputs with pytest.raises(ValueError, match='axes must be None'): tfr.plot(picks, colorbar=False, axes={}, mask=np.ones(tfr.data.shape[1:], bool)) # different number of axes and picks should throw a RuntimeError with pytest.raises(RuntimeError, match='There must be an axes'): tfr.plot(picks=[0], colorbar=False, axes=[ax, ax2], mask=np.ones(tfr.data.shape[1:], bool)) tfr.plot_topo(picks=[1, 2]) plt.close('all') # interactive mode on by default fig = tfr.plot(picks=[1], cmap='RdBu_r')[0] fig.canvas.key_press_event('up') fig.canvas.key_press_event(' ') fig.canvas.key_press_event('down') fig.canvas.key_press_event(' ') fig.canvas.key_press_event('+') fig.canvas.key_press_event(' ') fig.canvas.key_press_event('-') fig.canvas.key_press_event(' ') fig.canvas.key_press_event('pageup') fig.canvas.key_press_event(' ') fig.canvas.key_press_event('pagedown') cbar = fig.get_axes()[0].CB # Fake dragging with mouse. ax = cbar.cbar.ax _fake_click(fig, ax, (0.1, 0.1)) _fake_click(fig, ax, (0.1, 0.2), kind='motion') _fake_click(fig, ax, (0.1, 0.3), kind='release') _fake_click(fig, ax, (0.1, 0.1), button=3) _fake_click(fig, ax, (0.1, 0.2), button=3, kind='motion') _fake_click(fig, ax, (0.1, 0.3), kind='release') fig.canvas.scroll_event(0.5, 0.5, -0.5) # scroll down fig.canvas.scroll_event(0.5, 0.5, 0.5) # scroll up plt.close('all')