I want to make a simple contour plot with a function that takes positive and negative values (see below). I need the absolute values of the function to take the same shade in the contour plot (and greyscale would be best). Ultimately, I want the figure to look like a curved hill, where the top of the hill is the 0 contour.

Also, it would be great if I could remove the defined contour lines and smooth out the borders of the contours.

Thanks if you can help!

ContourPlot[(1 - c N z)/(N z - c N z^2) /. {c -> .01}, {N, 2, 50}, {z,

0, 20}] enter image description here


2 Answers 2


You should avoid using N as a variable name as N is a reserved word for a function that gives the numerical value of an expression to a desired precision.

The smoothness can be improved by increasing the default number of points used to create the contours (PlotPoints). The color scheme can be changed by the ColorFunction option. To make the level '0' the maximum you'd want to use -Abs[...]:

ContourPlot[-Abs[(1 - c n z)/(n z - c n z^2) /. {c -> .01}], {n, 2, 50}, {z, 0, 20},
  PlotPoints -> 100, ColorFunction -> GrayLevel]

gray scale contour plot

To show a "hill" it might be better to use Plot3D:

Show[Plot3D[-Abs[(1 - c n z)/(n z - c n z^2) /. {c -> .01}], {n, 2, 
   50}, {z, 0, 20},
  PlotPoints -> 100, ColorFunction -> GrayLevel],
   Line[Table[{n, 1/(c n) /. c -> 0.01, 0}, {n, 5, 50}]]}]]

3D plot with gray scale

  • $\begingroup$ I think the 3D plot will work best. Could you please tell me how to add a line to the "hilltop", where the function is zero? This is 1/(c n). $\endgroup$
    – jmbierna
    Jun 21, 2019 at 10:25
  • $\begingroup$ @jmbierna Hilltop line added. $\endgroup$
    – JimB
    Jun 21, 2019 at 17:39

You can also use DensityPlot with ColorData[{"GrayTones", "Reversed"}] as the color function:

c =  .01;
DensityPlot[Abs[(1 - c n z)/(n z - c n z^2) ],
  {n, 2, 50}, {z, 0, 20}, 
 PlotPoints -> 100, 
 ColorFunction -> ColorData[{"GrayTones", "Reversed"}]]

enter image description here

Using ColorFunction -> (GrayLevel[1 - #] &) gives a similar picture.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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