

def plot_projs_topomap(projs, layout=None, cmap=None, sensors=True, colorbar=False, res=64, size=1, show=True, outlines='head', contours=6, image_interp='bilinear', axes=None):
    "Plot topographic maps of SSP projections\n\n    Parameters\n    ----------\n    projs : list of Projection\n        The projections\n    layout : None | Layout | list of Layout\n        Layout instance specifying sensor positions (does not need to be\n        specified for Neuromag data). Or a list of Layout if projections\n        are from different sensor types.\n    cmap : matplotlib colormap | None\n        Colormap to use. If None, 'Reds' is used for all positive data,\n        otherwise defaults to 'RdBu_r'.\n    sensors : bool | str\n        Add markers for sensor locations to the plot. Accepts matplotlib plot\n        format string (e.g., 'r+' for red plusses). If True, a circle will be\n        used (via .add_artist). Defaults to True.\n    colorbar : bool\n        Plot a colorbar.\n    res : int\n        The resolution of the topomap image (n pixels along each side).\n    size : scalar\n        Side length of the topomaps in inches (only applies when plotting\n        multiple topomaps at a time).\n    show : bool\n        Show figure if True.\n    outlines : 'head' | 'skirt' | dict | None\n        The outlines to be drawn. If 'head', the default head scheme will be\n        drawn. If 'skirt' the head scheme will be drawn, but sensors are\n        allowed to be plotted outside of the head circle. If dict, each key\n        refers to a tuple of x and y positions, the values in 'mask_pos' will\n        serve as image mask, and the 'autoshrink' (bool) field will trigger\n        automated shrinking of the positions due to points outside the outline.\n        Alternatively, a matplotlib patch object can be passed for advanced\n        masking options, either directly or as a function that returns patches\n        (required for multi-axis plots). If None, nothing will be drawn.\n        Defaults to 'head'.\n    contours : int | False | None\n        The number of contour lines to draw. If 0, no contours will be drawn.\n    image_interp : str\n        The image interpolation to be used. All matplotlib options are\n        accepted.\n    axes : instance of Axes | list | None\n        The axes to plot to. If list, the list must be a list of Axes of\n        the same length as the number of projectors. If instance of Axes,\n        there must be only one projector. Defaults to None.\n\n    Returns\n    -------\n    fig : instance of matplotlib figure\n        Figure distributing one image per channel across sensor topography.\n\n    Notes\n    -----\n    .. versionadded:: 0.9.0\n    "
    import matplotlib.pyplot as plt
    if (layout is None):
        from ..channels import read_layout
        layout = read_layout('Vectorview-all')
    if (not isinstance(layout, list)):
        layout = [layout]
    n_projs = len(projs)
    nrows = math.floor(math.sqrt(n_projs))
    ncols = math.ceil((n_projs / nrows))
    if (axes is None):
        plt.figure()
        axes = list()
        for idx in range(len(projs)):
            ax = plt.subplot(nrows, ncols, (idx + 1))
            axes.append(ax)
    elif isinstance(axes, plt.Axes):
        axes = [axes]
    if (len(axes) != len(projs)):
        raise RuntimeError('There must be an axes for each picked projector.')
    for (proj_idx, proj) in enumerate(projs):
        axes[proj_idx].set_title((proj['desc'][:10] + '...'))
        ch_names = _clean_names(proj['data']['col_names'])
        data = proj['data']['data'].ravel()
        idx = []
        for l in layout:
            is_vv = l.kind.startswith('Vectorview')
            if is_vv:
                from ..channels.layout import _pair_grad_sensors_from_ch_names
                grad_pairs = _pair_grad_sensors_from_ch_names(ch_names)
                if grad_pairs:
                    ch_names = [ch_names[i] for i in grad_pairs]
            idx = [l.names.index(c) for c in ch_names if (c in l.names)]
            if (len(idx) == 0):
                continue
            pos = l.pos[idx]
            if (is_vv and grad_pairs):
                from ..channels.layout import _merge_grad_data
                shape = ((len(idx) // 2), 2, (- 1))
                pos = pos.reshape(shape).mean(axis=1)
                data = _merge_grad_data(data[grad_pairs]).ravel()
            break
        if len(idx):
            plot_topomap(data, pos[:, :2], vmax=None, cmap=cmap, sensors=sensors, res=res, axes=axes[proj_idx], outlines=outlines, contours=contours, image_interp=image_interp, show=False)
            if colorbar:
                plt.colorbar()
        else:
            raise RuntimeError(('Cannot find a proper layout for projection %s' % proj['desc']))
    tight_layout(fig=axes[0].get_figure())
    plt_show(show)
    return axes[0].get_figure()

dataset/ETHPy150Open mne-tools/mne-python/mne/viz/topomap.py plot_projs_topomap/original