Designing surface maps

Designing surface maps

Introduction:

  • Brain map: visualizing a number/result for each voxel/vertex in a single image.
  • One can do this for volumes/slices, but typically we like to do these for brain surfaces.
  • There is a lot of design choices involved; and interpreting maps can be challenging/tricky.
  • This document primarily focuses on surface visualizations, but Faruk reminds us that reality is 3D space and slice views. Two voxels can be close in 3D space but very far in surface space.
  • Here are some examples of surface visualizations:

Major design decisions:

  • Colormap choice. What is optimal depends on the data. Colormaps can drastically change your visual perception.
  • If seeing full dynamic range is really critical, it may make sense to use a pseudocolor (jet, turbo) map to visualize data that are fundamentally unidimensional/continuous.
  • matplotlib has a useful color palette comparison web pages.
  • Color range. This is critical. Choose based on what your data are like. Do a histogram of your data values. If 0 is meaningful, then you probably want a symmetric color range around 0 (and an appropriate colormap where 0 is clearly visible (e.g. white or black)). If you are comparing maps across e.g. subjects, you may very well want to fix the color range. (On the other hand, you may also need to tailor the range for each subject if there is massive variation across subjects.)
  • One principle might be: use the full dynamic range of colors to match the maximal variance in your data values.
  • Also make sure to create a color bar to help interpretation.
  • Whether to threshold/mask out vertices. It can be helpful to hide stuff if you feel that stuff is not important. Another advantage is once you hide stuff, you can show the "curvature" as an underlay. Obviously, the downside is you lose information. One strategy is do both (make unthresholded and thresholded versions).
  • Which cortical surface to visualize (inflated, flattened, sphere, etc.). One advantage of flat is that you fit everything (cortical at least) in a compact image. However, different surfaces look visually different, so you have vigilant/careful/explore different views.
  • There is a parallel with looking at maps of the Earth. We like flat maps.
  • A useful strategy is to label corresponding points across different surface visualizations, e.g.:
  • Which viewpoint to use (e.g. medial or lateral). If you use non-flattened surfaces, you might have to be careful to make sure you view the whole cortex to get a full sense of the data.
  • Whether to visualize on a group space (e.g. fsaverage) or individual surfaces. There is some niceness to want to view data in a common (e.g. stereotactic space) space, in the sense that you don't actually lose much information (it's just some spatial distortions) and you gain the ability to directly compare data across subjects. Of course, you have to think carefully about and worry about any "interpolation" step that occurs in performining this process.
  • Whether to show the underlying "anatomy" (i.e. sulci/gyri). You probably want to do this so that we understand where we are in the brain.
  • Faruk points out that true anatomy is more complicated. The binarization of curvature is so common is overly simplified. A lot of cortex is not really a sulcus or gyrus (they are more "straight"). Also, consider using a diverging colormap if you really want to know about the difference between sulci/gyri. E.g.:
  • Whether to label/annotate anatomy and/or ROIs. Obviously can be helpful, but takes effort, and can clutter the visualization. So you have to make some design decisions.
  • Whether to show both hemispheres. Obviously is informative, but takes real estate.
  • The rendering/shading/interpolation type that gets used. Be careful that shading can and will distort the colors you see.
  • The resolution at which you save images. Disk space and speed of opening images can be a concern.
  • Crop/zooming. Because brain maps can so overwhelming, you may want to consider cropping and/or zooming into specific parts of a big brain map. E.g.:
  • Font and font size for text annotations on your maps. This is very tricky; consider doing this type of stuff at the very end (e.g. for publication-ready figures).


What is the point of showing a map?:

  • Visualizing maps and interpreting them effectively is really hard for a lot of reasons:
  • the brain is complex
  • things vary a lot across the brain
  • colormaps can deceive (or enhance).
  • See Lightness colormaps section:  https://matplotlib.org/stable/tutorials/colors/colormaps.html 
  • neuroanatomy is hard (knowing what regions are where).
  • maps require a lot of screen real-estate and so it's hard to see everything.
  • The goal is to accurately extract/summarize aspects of the data. There are many possible inferences you might want to make:
  • Where in the brain is stuff the highest (or lowest), relative to some neuroanatomical landmark.
  • What is the spatial structure (regional shape) of the data values
  • What is the consistency of the brain values across subjects?
  • Maps are "qualitative" in the sense it's very hard to get a sense of actual numbers from only looking a map. (So typically you need to do both map-staring and quantitative ROI analysis.)

Additional examples:

  • Maybe we need animations to help make sense of brain maps. E.g.: Inflating parcels:  https://drive.google.com/file/d/1B2U2lEnA-sKORPg-_Z34g5V3t2lFKLQD/view?usp=sharing 
  • Some brain anatomy is not "sheet-like", and that's a whole another set of hard issues. E.g.:  https://youtu.be/jXstU-QqxZ0 


  • An example of how the same data can look so different across various surface visualizations:
  • A strategy for showing a 3D volume in 2D:
  • For structures that are fundamentally 3D, volume rendering is possible, e.g.: