SUMA colourmaps, representing positive vs negative betas with different colours

AFNI version info (afni -ver):
Precompiled binary linux_ubuntu_24_64: Jan 24 2026 (Version AFNI_26.0.07 'Pupienus Maximus')

Hi all,

I have a GLT contrast for 2 conditions of stimulation 3Hz tactile stimulation, and 30Hz stimulation in my GLM - it is entered as '3-30'.

I want to create an image that shows the nodes which prefer 3Hz and 30Hz. For example, negative beta values from the 3-30Hz contrast are blue and represent 30Hz preferring nodes, and vice versa with 3Hz preferring/ positive beta values being orange.

I load up my b3-b30_GLT#0_Coef sub-brick for I (Intensity) and b3-b30_GLT#0_Tstat for T (Threshold).

What I have noticed is that the colourisation looks different with different colourmaps in ways that I did not expect. E.g., When I use afni_n6 I get blue and orange colours, as below:

But if I use colourmap afni_n10, I get just orange, as below:

I had expected the point on the colour map where the colours change from warm to cool to represent the change from negative to positive beta values, so I would always see negative values as cool/ blue, and always see positive as warm/ orange. But this behaviour makes me think that is not the case. Is it, rather, that the halfway point on the colourbar represents the point halfway up the range of beta values?

Also changing the intensity max and min makes things change in ways I don't understand either.

I had been created binarised maps to get around this issue, and represent +/- beta values reliably, but I would prefer to not do this if I can work out how to do it without. They look like this for the same participant:

When I use the non binarised map with afni_n6 but change the intensity range to -1 to 1, I get maps that look quite similar to my binarised map

Thank you for your help! Sorry if this is a very basic thing I have not understood

H

The colors map from the min to the max I (intensity) in the surface object controller onto the current colormap. With the "Sym I" button selected, that will enforce the max to be the absolute value of the min and the min reset to the negative of that absolute value (try it). If you set a min value of 0, both min and max I are set to 0. The "Shw 0" shows any nodes that have values of exactly zero. By default, positive and negative are evenly split around 0, so positive values will come from the top half the color map, and negative values come from the bottom half. Send a screen capture of the controller if this isn't clear.

Hi, sorry, I am not 100% sure I follow, could I ask you to explain the colourisation in the specific case below?

Settings

  • afni_n6
  • Sym I = on
  • Did not change max/ min I (they have defaulted to ~-57/57 - not sure why)

Below, I have clicked in an orange coloured region, expecting a positive intensity (3-30 beta) value. But in the Surface Controller viewer, the intensity value is negative = -0.0257. I expected that negative intensity (beta) values would always be cool/ blue and positive would always be warm/ yellow/ orange...

Now I change the settings slightly
Settings

  • afni_n6 (same)
  • Sym I = on (same)
  • Max/ min changed to -1 and 1

The same area where I clicked and got a negative intensity value is now blue in colour, as expected.

My questions are:
a) Why do they change like this with different max intensity values?
b) what settings should I use to ensure I am always getting my intensity (beta) values cool = negative, and warm = positive. I just want to make a map where the sign of the intensity (betas) are represented truly.
c) Will the settings I need to use to do b change for each participant (as the range of betas changes)?

Thank you for your help,

H

Rick and I have discussed this problem, and we think there are a few things happening at once. First, the intensities are mapped to the color map using the range, and that can present some oddities like this one. The discrete intervals of the color map limit the resolution that's around the zero value. Normally, you won't see this because the values are usually thresholded away or alpha transparency reduced. There are a few solutions for seeing the positive and negatives more clearly.

  1. Make the range smaller by setting the max to a smaller number. That's what you did by resetting the range from -1 to 1. For your case, all the values are much smaller than the +/-57, and the discretization will scale small values like -0.02 to the top and bottom halves of the color map better. Very, very small (maybe 0.0002) will still have this "wrong side rounding" problem.

  2. Color interpolation selection. There is a control for how the rounding happens in the menu. The "Col" dropdown menu above the "Cmp" button allows you to choose Color interpolation scheme, where you can select among the Int, NN or Dir. I've put a screen capture of the BHelp (button help) for that item below. The V, Vmin and range in that help refer to the intensity, minimum intensity and the range (max-min). "Int" interpolates the index into the colormap, and it allows a blending of colors instead of a simple integer index that refer to the bottom of each corresponding band of the color map. That also means upper colors effectively get priority because the values are linearly interpolated by RGB values with weights to the nearest color map index. In your case, the values just below zero will look more like the positive range than the negative because of this interpolation; the slightly negative values get the RGB values of the next color index above the zero break. That is not what you want here. By setting the "Col" mode selection to the "NN" you skip that shift upwards, and each node gets colored by the color indexed in the color map with no blending. This is the most important recommendation for this case.

  3. Color map number of colors. More colors in the color map will also give more precision in the interpolation, so there will be fewer values in the critical range around zero that need to be interpolated at all. Using a color map with only six colors puts a large fraction of the range in the slot just below the zero cutoff.

  4. Triangle shading. This is not the problem you are having here, but it's important to realize the usual way we look at surfaces is to look at shaded triangles. Each of the nodes in the mesh contribute to that shading, so at borders between positive and negative regions with this kind of data, you will also get some blending that changes toward each corner of the triangle. If the positive colors are yellow, and the negative colors are blue, then the border triangles will have green in between even though there are no green colors in the colormap, and the Color mode is set to NN nearest neighbor coloring. I've put an image (a curvature map that ranges from -0.5 to +5.0) zooming in on the edge here to show the green border. You can look at just the mesh nodes as "points" to see the colors by themselves or the lines in the triangles with the 'p' key in suma.

Also note that with a tighter range, the difference between interpolated and nearest neighbor colors may be harder to see. That will depend on the color banding and the data. In the bottom example, using a tighter range of +/- 0.1, the hemispheres look similar even though one has nearest neighbor color mapping, and the other is interpolated.

Left interpolated color, Right NN color - range -100 to +100


Note green shading in filled triangles of the mesh between the yellow and blue nodes.

Image scaled from -0.1 to +0.1 with interpolated colors on left and NN colors on right