# Comparing 2 Data Sets in a Single Plot

I have 2 data sets, data1 and data2 with large (in the thousands) amounts of data and I want to compare them in a plane. They aren't modeled by the normal distribution, but I'm using that here for simplicity.

data1 = RandomReal[NormalDistribution[], {10000, 2}];
data2 = data1+1;


I can put these on a list plot and plot them. However, this is visually unpleasing and even hides some of the data.

combPlot = ListPlot[{data1, data2},
PlotRange->All,
PlotStyle->PointSize[0.01],
PlotStyle->Directive[Opacity[0.5]]
];
Export[Directory[] <> "/figures/test-comb.pdf", combPlot];


The SmoothDensityHistogram command with the following color function shows the data exactly how I want it for each data set.

histOpts = {ColorFunction -> Function[c, GrayLevel[1 - c]],
PlotRange -> {{-4, 4}, {-4, 4}}, ImageSize -> Medium};
hist1 = SmoothDensityHistogram[data1, histOpts];
Export[Directory[] <> "/figures/test-hist1.pdf", hist1];
hist2 = SmoothDensityHistogram[data2, histOpts];
Export[Directory[] <> "/figures/test-hist2.pdf", hist2];


How can I combine these into a single plot, preferably with different colors? I had no success using the Show command. Again, the idea is to visually compare the 2 data sets. If there are any other alternatives, I'd like to see them too.

Update: After seeing Diego Zviovich's post, I was able to get it working for my example. However, my actual data sets may significantly differ so the bounds aren't the same:

data1 = RandomReal[NormalDistribution[], {10000, 2}];
data2 = data1+10;

hist1 = SmoothDensityHistogram[data1,
ColorFunction->Function[c, Hue[215/360, .973, 1, c]],
PlotRange->All, ImageSize -> Medium];
hist2 = SmoothDensityHistogram[data2,
ColorFunction->Function[c, Hue[311/360, .973, 1, c]],
PlotRange->All, ImageSize -> Medium];
combHist = Show[
Rasterize[hist1],
Rasterize[hist2],
PlotRange->All
];

Export[Directory[] <> "/figures/test-hist1.pdf", hist1];
Export[Directory[] <> "/figures/test-hist2.pdf", hist2];
Export[Directory[] <> "/figures/test-combHist.pdf", combHist];


data1:

data2:

Combined:

How do I correct the bounds for this?

Update: Using m_goldberg's suggestion, I'm able to get what I want:

I'll leave this opened for a little for any further discussion, but I'm satisfied with this now. Thanks to everyone who helped!

Further update (sorry): I'm a little unsatisfied with the results for my actual data. The first one appears fine, but the second is overly distorted:

Does anybody have any further suggestions for these?

-
I don't fully understand why that works. Is there any weird hack to get Show to act as I expect here? – Brandon Amos Nov 27 '12 at 2:48
Hi @Highphi, what about switching the X-Axis to Log X or Ln X? – Zviovich Nov 27 '12 at 20:56
Just a guess, but perhaps their are few outlying data points that are expanding the plot range unduly. Perhaps you can restrict the plot range with something like PlotRange -> {{0,45000},{0,100}}. – m_goldberg Nov 28 '12 at 1:00

I you add PlotStyle -> Opacity[0.5] to histOpts you can to evaluate Show[hist1, hist2] to get

-
Sorry for forgetting about this! – Brandon Amos Mar 14 '13 at 22:42

Would this work for you?

g1 = Rasterize[hist1];
g2 = Rasterize[hist2];
ImageMultiply[hist1,hist2]


-
Yes! See my update for a slight issue I'm having. – Brandon Amos Nov 27 '12 at 3:35

Another way to go about this is to visualize in 3D. Taking the two data sets above, concatenate "1" to all the elements of the first data set and "-1" to the second data set.

dat1 = Partition[Flatten[Riffle[data1, 1, 2]], 3];
dat2 = Partition[Flatten[Riffle[data2, -1, 2]], 3];


Then you can plot in 3D.

ListPointPlot3D[{dat1, dat2}]
`

The advantage is that you can interactively rotate and play with the graph to view it from the different angles.

-