Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a 3D data that I want to visualise its each slice with ArrayPlot. However, there is a problem the way it represents the data. As,

ArrayPlot by default generates grayscale output, in which zero values are shown white, and the maximum positive or negative value is shown black.

It conflicts with the general idea, cause it should represent 0 values as black, max value(if it is scaled, equals to 1) as white and the rest of the values as gray levels.

I am playing with it and I wrote a code sample:

ArrayPlot[data, ColorFunctionScaling -> True, ColorRules -> {1 -> White, 0 -> Black}]

I am not sure whether it is correct. Actually, I am not satisfied with the result.

Any help is appreciated.Thanks.

share|improve this question
up vote 3 down vote accepted

You have to set ColorFunction. Please compare the resulting graphics

data = Table[x, {200}, {x, 0, 1, 1/199.}];
ArrayPlot[data, ColorFunction -> GrayLevel]

A word to your comment

Using strings as option value to ColorFunction lets you easily select one of the color gradients provided by Mathematica. In all other cases ColorFunction should really be a function, meaning that it takes a numeric value and results in a color like RGBColor, GrayLevel, Hue, CMYKColor or named colors like Red or even Opacity combinations.$^1$

Therefore, while "GrayTones" is color gradient, GrayLevel is a function. I hope this clears the confusion. To add some more confusion, there is a "Grayscale" too which is used in Image or Rasterize to set the ColorSpace. Just in case you stumble over it and wonder what's this all about.

$^1$ Actually, you can also return numeric values which are interpreted as colors:

  • a triple {r,g,b} is interpreted as a rgb-color
  • a number is interpreted as a gray level
  • a tuple {g,alpha} is interpreted as gray level with alpha channel
  • a list {c,m,y,k} is interpreted as CMYK-color
share|improve this answer
Thanks. I had tried this command with quotation marks which didn't make difference(i.e."GrayLevel") :( . By the way, I have just noticed that assigning ColorFunction to "GrayTones" gives the same result. – cesm Jul 28 '13 at 7:22
@cesm I cleared the confusion why "GrayLevel" is not working by adding some information to my answer. – halirutan Jul 28 '13 at 22:28
Thank you for the clearence. Here comes another confusion. I have also used Image for visualizing. However, although I assigned ColorSpace to Graylevel(or Grayscale), I got a binary image(evidenced by the histogram). After, I used ImageAdjust, I got gray-scale images as I got with ArrayPlot. Here is the code that I wrote Map[ImageAdjust[#] &, Image[data[[;; , ;; , #]], ColorSpace -> "Graylevel"] & /@ Range[1, Dimensions[data][[3]]], {1}]. – cesm Jul 29 '13 at 7:21

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.