Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I am making some density and contour plots in Mathematica. These plots have very high peaks which saturate with color and prevent me from seeing differences in the peaks. Is there a way I can tone down the color scale so my peaks are not just white blobs?

Trying other color schemes has not worked out, and playing with the range of color data has not been very useful. Is there some way to have the colors on a log scale???

Here is my code.

ListDensityPlot[photo, PlotLegends -> Automatic, Frame -> {True}, 
FrameLabel -> {"Electron Bunch Energy (MeV)", "Photon Energy (keV)", 
"", "Yield (Photons/Sr e-KeV)" }, LabelStyle -> {15}, 
InterpolationOrder -> 10]

enter image description here

Cheers, Ben

share|improve this question
1  
Have you tried ColorFunctionScaling -> False ? –  Artes Aug 22 '13 at 21:58
2  
How about plotting Log[photo] instead? –  Rahul Aug 22 '13 at 21:59
1  
Welcome, Ben. I have added your image. I would be very helpful if you could include the photo data or something smaller that is representative. –  Mr.Wizard Aug 22 '13 at 22:11
    
photo is a table of data with 3 columns, taking log[photo] does not work well, but maybe if I could just take the log of the third column. Any thought on how to do this? (I am very new to mathematica) –  user1558881 Aug 22 '13 at 22:18
1  
{#, #2, Log@#3} & @@@ data or MapAt[Log, data, {All, 3}] –  Kuba Aug 22 '13 at 22:37

3 Answers 3

up vote 4 down vote accepted

It's difficult to help without photo data, but I'm almost sure that PlotRange can solve your problem. Try to control Z coordinate in PlotRange as in this example, to find a better range to your plot.

pSaturated=DensityPlot[Exp[-10(x^2+y^2)],{x,-1,1},{y,-1,1},ImageSize->400];
pOK=DensityPlot[Exp[-10(x^2+y^2)],{x,-1,1},{y,-1,1},PlotRange->{All,All,{0,1}},ImageSize->400];
Row[{pSaturated,pOK}]

enter image description here

share|improve this answer
    
This is very helpful but by limiting my plotting range I would be losing information. But, I appreciate the thought! –  user1558881 Aug 22 '13 at 23:05
1  
You are not limiting you are extending for beyond the saturation zone. :) –  Murta Aug 22 '13 at 23:24
    
This worked out very well, I was able to make some excellent plots! Any thoughts on how to get rid of the the discontinuous nature and extrapolate the plot? –  user1558881 Aug 23 '13 at 2:47
    
I'm glad that it has helped you! Maybe in PlotRange->{All,All,{0,1}} you can make it more generic using PlotRange->{All,All,{0,Max[photo[[All,3]]]}}. –  Murta Aug 23 '13 at 3:05
    
As @Kuba suggests PlotRange->All is much more elegant. See if it works for you. There are some cases that it's necessary to specify manually. –  Murta Aug 23 '13 at 14:21

Borrowing Murta's data we can also try out Rahul Narain's Log recommendation:

data = Table[Exp[-10 (x^2 + y^2)], {x, -1, 1, 0.02}, {y, -1, 1, 0.02}];

ListDensityPlot[data]

ListDensityPlot[Log @ data]

enter image description here enter image description here

If your data is in the (x,y,z) form you will need something like {#, #2, Log@#3} & @@@ data as Kuba comments above.

share|improve this answer

Sorry for the delay but I had net gap.

I wanted to write that sometimes Mathematica is doing things we are not expecting in order to do them fast for example.

It seems in this case default ColorFunctionScalling is not so bad, it's just the issue of not all is plotted.

Sometimes it is also useful to choose more colorful palette:

data = Table[{x, y, 10^6 Exp[-10 (x^2 + y^2)]}, {x, -1, 1, 0.02}, {y, -1, 1, 0.02}
            ] // Flatten[#, 1] &;

SetOptions[ListDensityPlot, ImageSize -> 250]

GraphicsRow[{
   ListDensityPlot[data],
   ListDensityPlot[data, PlotRange -> All],
   ListDensityPlot[data, PlotRange -> All, ColorFunction -> "Rainbow"]
   }]

So basicaly it is what @Murta showed but without checking the range.

enter image description here

share|improve this answer

Your Answer

 
discard

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.