As sophomoric as this question seems, how should I save plots in grayscale in Mathematica?
I generally like eps images for their scalability and I use ghostscript or other third party perl scripts to convert my images to grayscale.
Mathematica Stack Exchange is a question and answer site for users of Wolfram Mathematica. It only takes a minute to sign up.
Sign up to join this communityOne way would be to use ColorConvert
to convert the RGB
or Hue
values to gray scale. Here's an example:
Plot[{Sin[x], Cos[x], Exp[-x^2], Sinc[π x]}, {x, 0, π}] /.
x : _RGBColor | _Hue | _CMYKColor :> ColorConvert[x, "Grayscale"]
For 2D plots that accept a ColorFunction
, you can simply use GrayLevel
to get the plot in grayscale as:
DensityPlot[
Sin[x ^2 + y^2], {x, 0, 3}, {y, 0, 3},
ColorFunction -> GrayLevel,
PlotPoints -> 100
]
Typically, these grayscale plots are useful when submitting to journals that charge exorbitant prices just to print in colour. However, just a note of caution that discerning different shades of gray is not easy. For the most effect, it is recommended (at least in the journals I publish in), that you also change the line type for your different curves (and not more than 4 curves/plot). You should also choose the colours (or colourscale, for 2D surface plots) wisely so that they convert well to grayscale. For example:
toGrayScale[y_] := y /. x__?(MemberQ[{RGBColor, Hue, CMYKColor}, Head[#]] &) :> ColorConvert[x, "Grayscale"]
so that it can be done as an afterthought. e.g. ListLinePlot[RandomReal[{0, 1}, {3, 15, 2}]] // toGrayScale
; it works also on ContourPlot
etc... (not very different from the solution above though !)
$\endgroup$
GrayLevel[]
, there's also ColorData["GrayTones"]
.
$\endgroup$
Jun 16, 2012 at 10:43
One way would be to roll your own color functions. For continuous use:
grayScale = Blend[{Black, White}, #1] &
ContourPlot[Sin[x + y], {x, 0, 2 \[Pi]}, {y, 0, \[Pi]},
ColorFunction -> grayScale]
For discrete plots:
grayColorList = (Blend[{Black, White}, #] & /@ Range[0, 1, 0.1])
Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotStyle -> grayColorList[[1]]]