Basic, but useful options
Something that certainly helps in representing your data is to set the range of x and y to be equal:
ListPlot[data, PlotRange -> {{0,3},{0,3}}, AxesLabel -> {X, Y}]
Moreover, if the slope is also important you should set the aspect ratio to 1:
ListPlot[data, PlotRange -> {{0,3},{0,3}}, AxesLabel -> {X, Y}, AspectRatio -> 1]
Confidence ellipses
In some cases it is convenient to add a confidence ellipse.
Let's generate some data:
data = Table[
RandomVariate[BinormalDistribution[{50, 50}, {5, 10}, .8]], {1000}];
Here we get the estimates of the generated data:
estDist = EstimatedDistribution[data,
BinormalDistribution[
{μ1, μ2}, {σ1, σ2}, ρ]]
And, here there are two useful functions that I found somewhere some time ago. Unfortunately, I'm not able to refer to the original author.
Ellipse[{{r_, M_}, m_}, {x_, y_}] :=
Show[ContourPlot[({x, y} - r).M.({x, y} - r) == m,
{x, 0, 100}, {y, 0, 100}, ContourStyle -> {Red, Thick}],
ListPlot[{r}]
];
showEllipse[r0_, s1_, s2_, rho_, perc_] :=
Module[{dchi2, fi, fic, V, InvV},
Clear[σ, ρ];
dchi2 = Quantile[ChiSquareDistribution[2], perc];
fi = Which[s1 == s2, π/4 Sign[rho],
s1 > s2, 1/2 ArcTan[(2 rho s1 s2)/(s1^2 - s2^2)],
s1 < s2, 1/2 ArcTan[(2 rho s1 s2)/(s1^2 - s2^2)] - π/2];
fic = If[fi < 0, π + fi, fi];
V = {{s1^2, rho s1 s2}, {rho s1 s2, s2^2}};
InvV = Inverse[V];
Ellipse[{{r0, InvV}, dchi2}, {x, y}]
]
Now we can plot the data and the 95% confidence ellipse:
Show[{
ListPlot[data, PlotRange -> {{0, 100}, {0, 100}}, AspectRatio ->1],
showEllipse[estDist[[1]], estDist[[2, 1]], estDist[[2, 2]], estDist[[3]], .95]
}]

Or, even multiple confidence ellipses (95% and 99%):
Show[{
ListPlot[data, PlotRange -> {{0, 100}, {0, 100}}, AspectRatio ->1],
showEllipse[estDist[[1]], estDist[[2, 1]], estDist[[2, 2]], estDist[[3]], .99],
showEllipse[estDist[[1]], estDist[[2, 1]], estDist[[2, 2]], estDist[[3]], .95]
}]
