I just saw a nice plot there:

How could I implement that in Mathematica — by which I mean the plot structure, not so much the styling.
I just saw a nice plot there:

How could I implement that in Mathematica — by which I mean the plot structure, not so much the styling.
There is also a more eye-catchy approach that uses built-in functions.
data = RandomReal[BinormalDistribution[{-1, 2}, {1, 1}, .8], 1000];
GraphicsColumn[
Table[DensityHistogram[data, {.2}, ColorFunction -> "DarkRainbow",
Method -> {"DistributionAxes" -> p},
ImageSize -> 500, BaseStyle -> {FontFamily -> "Helvetica"},
LabelStyle -> Bold],
{p, {True, "Histogram", "SmoothHistogram", "BoxWhisker"}}]]

And it works also with SmoothDensityHistogram, although it seems that in this case Histogram cannot be used as a method:
GraphicsColumn[
Table[SmoothDensityHistogram[data, ColorFunction -> "DarkRainbow",
Method -> {"DistributionAxes" -> p},
ImageSize -> 500, BaseStyle -> {FontFamily -> "Helvetica"},
LabelStyle -> Bold],
{p, {True, "SmoothHistogram", "BoxWhisker"}}]]

data = RandomReal[BinormalDistribution[{0, 0}, {1, 1}, .8], 1000];
hist = DensityHistogram[data, {.2},
Method -> {"DistributionAxes" -> "Histogram"}][[1, 2]];
Show[
Graphics[hist, AspectRatio -> 1, Frame -> True,
PlotRangeClipping -> True,
PlotRangePadding -> {{Scaled[0.02], Scaled[0.02]}, {Scaled[0.02],
Scaled[0.02]}}],
ListPlot[data]
]

Method -> {"DistributionAxes" ->...} only "BoxWhisker" is listed in the examples.
– Mike Honeychurch
Mar 30 '12 at 06:18
Histogram as a "DistributionAxes" option, so I followed then the trial-and-error method to find other solutions. It might well be that there are other options out there that work.
– VLC
Mar 30 '12 at 06:38
ListPlot. If you post a question, you might get answers from all users.
– VLC
Oct 23 '12 at 20:32
Here's my solution, which constructs the three components and uses Inset to combine them into a single graphic. I've taken some care so that:
customPlot[data_, o___] :=
Block[{xmin, xmax, ymin, ymax, x, y, mainplot, xhist, yhist,
opts = Flatten[{o}]},
{x, y} = Transpose[data];
xhist = HistogramList[x, 50];
yhist = HistogramList[y, 50];
{xmin, xmax} = Through[{Min, Max}[First[xhist]]];
{ymin, ymax} = Through[{Min, Max}[First[yhist]]];
mainplot =
ListPlot[data, Frame -> {{False, True}, {False, True}},
Axes -> False, FrameTicks -> None, AspectRatio -> 1,
PlotRange -> {{xmin, xmax}, {ymin, ymax}},
PlotRangePadding -> Scaled[0.02], ImagePadding -> {{None, 1}, {None, 1}},
FilterRules[opts, Options[ListPlot]],
FrameStyle -> GrayLevel[0.3], GridLines -> Automatic,
GridLinesStyle -> Directive[Gray, Dotted]];
xhist =
Histogram[x, {First[xhist]},
Frame -> {{True, True}, {True, False}},
FrameTicks -> {{None, None}, {Automatic, None}}, Axes -> False,
AspectRatio -> 1/3, ImagePadding -> {{1, 1}, {None, All}},
FilterRules[opts, Options[Histogram]],
GridLines -> {Automatic, None}, FrameStyle -> GrayLevel[0.3],
GridLinesStyle -> Directive[Gray, Dotted]];
yhist =
Histogram[y, {First[yhist]},
Frame -> {{True, False}, {True, True}}, Axes -> False,
FrameTicks -> {{Automatic, None}, {None, None}}, AspectRatio -> 3,
BarOrigin -> Left, ImagePadding -> {{All, None}, {1, 1}},
FilterRules[opts, Options[Histogram]],
GridLines -> {None, Automatic}, FrameStyle -> GrayLevel[0.3],
GridLinesStyle -> Directive[Gray, Dotted]];
Graphics[{{Opacity[0], Point[{{360, 360}, {-120, -120}}]},
Inset[mainplot, {0, 0}, {Left, Bottom}, {360, 360}],
Inset[xhist, {0, 0}, {Left, Top}, {360, Automatic}],
Inset[yhist, {0, 0}, {Right, Bottom}, {Automatic, 360}]},
PlotRange -> {{-120, 360}, {-120, 360}},
FilterRules[opts, Options[Graphics]],
ImagePadding -> {{30, 1}, {30, 1}}]
]
Now to create some data and try it out:
d = RandomVariate[BinormalDistribution[{0, 0}, {1, 2}, 0.4], 100];
customPlot[d]
customPlot[d,
PlotStyle -> Directive[PointSize[Large], Orange],
ChartStyle -> Orange, ChartElementFunction -> "FadingRectangle",
FrameStyle -> White, Background -> Black]
ImagePadding on all the components to fix this (which means that tick labels may get clipped slightly.)
– Brett Champion
Mar 15 '12 at 14:29
This doesn't have the styling and it doesn't yet enforce the plot ranges or implement the regression line, but it's a start:
fakeBloombergThing[data:{{_?NumericQ, _?NumericQ}..}] :=
Grid[{{Histogram[data[[All, 2]], BarOrigin -> Left ,
AspectRatio -> 5, ImageSize -> 80],
ListPlot[data, Frame -> True, AspectRatio -> 1,
ImageSize -> 350]}, {Null,
Histogram[data[[All, 1]] , AspectRatio -> 1/5,
ImageSize -> 350]}}]
Some fake data:
testdata =
RandomVariate[BinormalDistribution[{-1, 1}, {1, 2}, -.6], 100];
fakeBloombergThing[testdata]

ImagePadding as well for cases where significant figures in ticks can be large. That might also correct the misalignment of the "Y" histogram x axis with the scatter plot x axis.
– Mike Honeychurch
Mar 14 '12 at 21:58
Here's a truly hacky approach that uses Show to align a ListPlot of the points with the DensityHistogram, which we use only for the histograms along the axes. In order to hide the actual density histogram, we make everything white (which somewhat limits the styling options).
somePoints = RandomReal[BinormalDistribution[{-1, 2}, {1, 1}, .8], 1000];
Show[
DensityHistogram[somePoints, {.2}, ColorFunction -> (White &),
Method -> {"DistributionAxes" -> "Histogram"}],
ListPlot[somePoints]]
ColorFunction -> (Opacity[0] &) instead of ColorFunction->(White &)
– Verbeia
Mar 30 '12 at 03:54
Fillingbefore - it's not the sort of thing we do at my employer. We are quite minimalist on the decoration side. – Verbeia Mar 14 '12 at 21:47