There are several issues one has to contend with when implementing gradients.
- First,
VertexColor is unfortunately quite broken. It doesn't export properly to PDF, and it causes loss of antialiasing when drawing plots on top of polygons with VertexColors (see this question).
- Second, you would ideally not want to have to custom-draw the dimensions of the gradient background from scratch for every plot you create. It should be as simple as specifying a single option.
So here is an approach that tries to deal with these issues. It allows you to add the desired background uniformly to any plot by only adding Prolog-> gradientBackground.
First I define the background in such a way that it can adjust itself to any plot in which it is placed:
gradientBackground = With[
{
bottomColor = Lighter[Orange],
topColor = Lighter[Cyan]
},
Inset[
Show[
Rasterize[Graphics[
Polygon[
{{0, 0}, {1, 0}, {1, 1}, {0, 1}},
VertexColors -> {
bottomColor, bottomColor, topColor, topColor
}
],
PlotRangePadding -> 0,
ImagePadding -> 0
], "Image"],
AspectRatio -> Full],
{Left, Bottom},
{0, 0},
ImageScaled[{1, 1}]
]
];
Now we just have to test it with a few examples:
ListPlot[{1, 2, 3},
Prolog -> gradientBackground,
PlotRangePadding -> None,
PlotRange -> {{0, 3.5}, {0, 3.5}}
]

ListPlot[Sin[Range[0, 2 Pi, Pi/10]],
Prolog -> gradientBackground,
PlotRangePadding -> None
]
In the above two plots, I've added PlotRangePadding -> None so that the background only appears inside the plot range. But if you want the whole region of the plot to be filled, you can do that by adding PlotRangeClipping -> False instead of suppressing the padding:
ListPlot[Sin[Range[0, 2 Pi, Pi/10]],
Prolog -> gradientBackground,
PlotRangeClipping -> False
]

Plot[Sin[x], {x, 0, 2 Pi},
Frame -> True,
FrameLabel -> {"x", "y"},
Prolog -> gradientBackground,
PlotRangeClipping -> False]

The last plot shows that it doesn't just work for ListPlot.
Although I use VertexColors in the definition of gradientBackground, I then immediately rasterize it. You could leave that out and try the last plot again, to see how bad it would look without rasterization. To achieve the adjustability of the background, I wrapped the rasterized gradient in Show with the option AspectRatio -> Full, which makes the inset rubbery when I then specify the third argument of Inset to be 1 in ImageScaled coordinates.
ListPlot[{1, 2, 3}, Background -> Directive[Opacity[0.1], Green]]– chris Dec 11 '12 at 13:21