# Changing location and direction of axes

I need to produce a plot that looks something like this:

from a function definition where z (the vertical axis) is the independent variable. I can easily invert the function, so making the vertical axis the dependent variable is easy. But I can't find a way to orient the system as it is in the picture, with x values increasing from left to right, and y values from top to bottom, with the axes as shown. I've found several related questions on this site, but nothing that specifically addresses this issue, nor can I find a Plot option that solves my problem.

LogLinearPlot[Exp[x], {x, .1, 100},
Epilog -> {
Lighter@Blue, Line[{{-3, -15.0}, {Log@100, 0}}],
Text[Style["Lake 1", Lighter@Blue], {0.5, -10}],
Darker@Red, Line[{{-3, -22.5}, {Log@100, 0}}],
Text[Style["Lake 2", Darker@Red], {0.5, -15}],
Darker@Green, Line[{{-3, -30.0}, {Log@100, 0}}],
Text[Style["Lake 3", Darker@Green], {0.5, -20}]
},
AspectRatio -> 1,
AxesLabel -> {100*l[z]/l[0], z},
ImageSize -> 400,
PlotRange -> {{0, 100}, {-30, 0}},
Ticks -> {Automatic, Map[{-#, #} &, Range[0, 30, 5]]}]

• So the trick (which I should have seen) is to make the vertical axis actually the negative of what you want and just relabel it. Cute. Commented Dec 22, 2015 at 21:04

you need to work with Frame and FrameTicks, something like this:

LogLinearPlot[30 - 30 Exp[-x], {x, .1, 100},
Frame -> {{True, False}, {False, True}},
PlotRange -> {{.1, 100}, {0, 30}},
FrameTicks -> {{Table[{i, 30 - i}, {i, 0, 30, 5}], None},
{None, {.1, 1, 10, 100}}},
Epilog -> Table[Line[{{Log[.1], 30 - s},
{Log[100], 30}}], {s, {15, 22, 30}}]]

note plot thinks the vertical axis goes from 0 at the bottom to 30 at the top, so we fix the ticks to {{0, 30}, {5, 25}, {10, 20},... and also transform the function as 30-f[x]. Quit a bit of fiddling required but unfortunately i don't think there is a more direct way.

• OP also wants the y-axis flipped. Commented Dec 22, 2015 at 16:51
• see edit.. .... Commented Dec 22, 2015 at 16:59
• Seems like a pretty common request; I'm surprised there's no easier way. But this works great. Thanks. Commented Dec 22, 2015 at 17:19