A bit more compact:
Plot[{Log[x], Differences[Log[Range[10]]].UnitStep[x - Range[9]]},
{x, 1, 10}, Filling -> {2 -> {1}}]

In the interest of making this post less useless, here is a general function for depicting the difference between a function and its left or right Riemann approximation:
Options[RiemannErrorPlot] = Sort[Join[Options[Plot], {"Panels" -> 10, "Type" -> Left}]];
RiemannErrorPlot[ff_, {x_, xmin_, xmax_}, opts : OptionsPattern[]] :=
Module[{app, f, n, pts, typ},
n = Max[1, Round[OptionValue["Panels"]]];
typ = OptionValue["Type"];
If[! MatchQ[typ, Left | Right],
Message[NIntegrate::riemtype, typ]; Return[$Failed]];
f = Function[x, ff, Listable];
pts = Range[xmin, xmax, (xmax - xmin)/n];
app = Function[\[FormalX], f[xmin] + Differences[f[pts]] .
UnitStep[\[FormalX] - Switch[typ, Left, Rest, Right, Most][pts]]
// Evaluate, Listable];
Plot[{f[x], app[x]}, {x, xmin, xmax}, Filling -> {2 -> {1}},
Evaluate[Sequence @@ FilterRules[{opts}, Options[Plot]]],
FillingStyle -> LightGray, PlotStyle -> {Red, Gray}]]
A demonstration:
Table[RiemannErrorPlot[x^4 - 3 x^2 + 1, {x, -1, 2}, Frame -> True, "Panels" -> 20,
PlotLabel -> StringForm["`1` approximation", type], "Type" -> type],
{type, {Left, Right}}] // GraphicsRow

I didn't implement the midpoint approximation, but it isn't too hard to add support for it; I'll leave that addition as an exercise for the interested reader.