This page is a reference documentation. It only explains the function signature, and not how to use it. Please refer to the user guide for the big picture.

8.11.19. nilearn.plotting.plot_surf_stat_map

nilearn.plotting.plot_surf_stat_map(surf_mesh, stat_map, bg_map=None, hemi='left', view='lateral', engine='matplotlib', threshold=None, alpha='auto', vmax=None, cmap='cold_hot', colorbar=True, symmetric_cbar='auto', cbar_tick_format='auto', bg_on_data=False, darkness=1, title=None, title_font_size=18, output_file=None, axes=None, figure=None, **kwargs)[source]

Plotting a stats map on a surface mesh with optional background

New in version 0.3.

surf_meshstr or list of two numpy.ndarray or Mesh

Surface mesh geometry, can be a file (valid formats are .gii or Freesurfer specific files such as .orig, .pial, .sphere, .white, .inflated) or a list of two Numpy arrays, the first containing the x-y-z coordinates of the mesh vertices, the second containing the indices (into coords) of the mesh faces, or a Mesh object with “coordinates” and “faces” attributes.

stat_mapstr or numpy.ndarray

Statistical map to be displayed on the surface mesh, can be a file (valid formats are .gii, .mgz, .nii, .nii.gz, or Freesurfer specific files such as .thickness, .area, .curv, .sulc, .annot, .label) or a Numpy array with a value for each vertex of the surf_mesh.

bg_mapSurface data object (to be defined), optional

Background image to be plotted on the mesh underneath the stat_map in greyscale, most likely a sulcal depth map for realistic shading.

hemi{‘left’, ‘right’}, optional

Hemisphere to display. Default=’left’.

view{‘lateral’, ‘medial’, ‘dorsal’, ‘ventral’, ‘anterior’, ‘posterior’}, optional

View of the surface that is rendered. Default=’lateral’.

engine{‘matplotlib’, ‘plotly’}, optional

New in version 0.9.0.

Selects which plotting engine will be used by plot_surf_stat_map. Currently, only matplotlib and plotly are supported.


To use the plotly engine you need to have plotly installed.


To be able to save figures to disk with the plotly engine you need to have kaleido installed.


The plotly engine is new and experimental. Please report bugs that you may encounter.


thresholda number or None, optional

If None is given, the image is not thresholded. If a number is given, it is used to threshold the image, values below the threshold (in absolute value) are plotted as transparent.

cmapmatplotlib.colors.Colormap, or str, optional

The colormap to use. Either a string which is a name of a matplotlib colormap, or a matplotlib colormap object.

cbar_tick_formatstr, optional

Controls how to format the tick labels of the colorbar. Ex: use “%%.2g” to display using scientific notation. Default=”auto” which will select:

  • ‘%.2g’ (scientific notation) with matplotlib engine.

  • ‘.1f’ (rounded floats) with plotly engine.

New in version 0.7.1.

colorbarbool, optional

If True, display a colorbar on the right of the plots.


This function uses a symmetric colorbar for the statistical map.


alphafloat or ‘auto’, optional

Alpha level of the mesh (not the stat_map). If ‘auto’ is chosen, alpha will default to .5 when no bg_map is passed and to 1 if a bg_map is passed. Default=’auto’.


This option is currently only implemented for the matplotlib engine.

vmaxfloat, optional

Upper bound of the colormap. If None, the max of the image is used. Passed to matplotlib.pyplot.imshow.

symmetric_cbarbool, or ‘auto’, optional

Specifies whether the colorbar should range from -vmax to vmax or from vmin to vmax. Setting to ‘auto’ will select the latter if the range of the whole image is either positive or negative.


The colormap will always range from -vmax to vmax.


bg_on_databool, optional

If True, and a bg_map is specified, the surf_data data is multiplied by the background image, so that e.g. sulcal depth is visible beneath the surf_data.


This non-uniformly changes the surf_data values according to e.g the sulcal depth.


darknessfloat between 0 and 1, optional

Specifying the darkness of the background image:

  • ‘1’ indicates that the original values of the background are used

  • ‘.5’ indicates that the background values are reduced by half before being applied.



This option is currently only implemented for the matplotlib engine.

titlestr, or None, optional

The title displayed on the figure. Default=None.

title_font_sizeint, optional

Size of the title font.

New in version 0.9.0.


output_filestr, or None, optional

The name of an image file to export the plot to. Valid extensions are .png, .pdf, .svg. If output_file is not None, the plot is saved to a file, and the display is closed.

axesinstance of matplotlib axes, None, optional

The axes instance to plot to. The projection must be ‘3d’ (e.g., figure, axes = plt.subplots(subplot_kw={‘projection’: ‘3d’}), where axes should be passed.). If None, a new axes is created.


This option is currently only implemented for the matplotlib engine.

figureint, or matplotlib.figure.Figure, or None, optional

Matplotlib figure used or its number. If None is given, a new figure is created.


This option is currently only implemented for the matplotlib engine.

kwargsdict, optional

Keyword arguments passed to nilearn.plotting.plot_surf.

See also


For surface data object to be used as background map for this plotting function.


For brain surface visualization.


For info on the generation of surfaces.