Okay, here is how I would draw it with my Presentations application. It's an example of working more with primitives than trying to modify a top-down design. ListLineDraw is like ListLinePlot except that it just returns the primitive graphics elements of the object being drawn without all the frame items. RotateOp is like Rotate except you can use it directly like a postfix operator without all the graphics to be rotated embedded in the middle. CustomTicks allows you to specify your own ticks and subticks. I used it here to reverse the y-axis. I also drew a line for the vertical Pile Slope axis. It could just be mixed in with the other primitives. No Epilog or Graphics level jumping.
<< Presentations`
f[x_] := 4 Sin[0.3 (x + 10 \[Degree])]
fdata = Table[{x, f[x]}, {x, -20, 0, 1}];
yticks = CustomTicks[-# &, {-20, 0, 5, 5}];
Draw2D[
{{ListLineDraw[fdata,
Filling -> Axis,
FillingStyle -> ColorData["Legacy"]["LightSkyBlue"]],
Line[{{-20, 0}, {0, 0}}]} // RotateOp[-\[Pi]/2, {0, 0}]},
Frame -> True,
FrameTicks -> {{yticks, yticks // NoTickLabels}, {Automatic,
Automatic}},
FrameLabel -> {"Pile Slope \[Times] \!\(\*SuperscriptBox[\(10\), \
\(-3\)]\)", "Pile Depth m" },
ImageSize -> 200]
I realized that the above solution leaves out a needed reflection but that's easy to fix. Just add it after the rotation. One of the advantages of always dealing with primitives is that we can not only easily combine them - just draw one thing after another - but we can also easily manipulate them, individually if necessary.
Draw2D[
{{ListLineDraw[fdata,
Filling -> Axis,
FillingStyle -> ColorData["Legacy"]["LightSkyBlue"]],
Line[{{-20, 0}, {0, 0}}]} // RotateOp[-\[Pi]/2, {0, 0}] //
ReflectionMatrixOp[{0, 1}]},
Frame -> True,
FrameTicks -> Automatic,
FrameLabel -> {"Pile Slope \[Times] \!\(\*SuperscriptBox[\(10\), \
\(-3\)]\)", "Pile Depth m" },
ImageSize -> 200]