The ScalingFunctions
option is officially documented for BarChart
and similar functions, but it actually works with the *Plot functions as well! See Belisarius's comment here.
In your case, you could use it to your advantage:
data = Table[{10^-k, 10^(-2 k)}, {k, 5}]
ListPlot[
data,
ScalingFunctions -> {{-Log10[#] &, 10^-# &}, "Log"},
Frame -> {True, True, False, False}
]
Here I am using a plot Frame
rather than the Axes
because I found that the latter have a disappointing tendency to now show up in log plots unless one specifies an AxisOrigin
explicitly, which is typically a pain. Fortunately, however, a frame can be effectively used in lieu of axes, and it will always show up independent of the plot range.
Some standard scaling options for ScalingFunctions
are shown in its documentation, such as "Log" for simple log plots, and "Reversed" to invert the values along one axis. What you want would be a combination of "Log"
and "Reverse"
for the x-axis. Unfortunately, however, no more than one of these built-in versions can be applied at a time, so we have to roll our own scaling function in your case.
For each axis, you provide a pair of functions to generate the desired scaling. If you'll allow me the hand-waving explanation, here is how I envision the process. The first function is applied to the raw data to determine the transformed value that will actually be plotted. Appropriate plot tick positions are then calculated internally, and the second function (typically the inverse of the first one) is applied to their value to generate the corresponding labels, so you get the effect mentioned in the documentation, i.e. ticks and gridlines showing unscaled values at scaled locations, just like one would expect for a log-log plot.
With that in mind, the "Log"
scaling would be represented by a Log10[#]&
scaling function; the "Reverse"
scaling by a -#&
function. Combine the two, and you'll obtain your desired reversed log scaling: -Log10[#]&
. To generate ticks and grid lines, you'll need the inverse of that function, which of course is 10^-#&
.
This use of ScalingFunctions
has been shown before on this site (I wouldn't have been able to figure this out on my own!). I can't seem to find the relevant question right now, but I will add a link when I find it.
As soon as I posted the answer, I saw the comments from @GuessWhoItIs and @2012rcampion, respectively providing the link I couldn't find, and something very close to the solution I proposed here. Hopefully my explanation may still be useful to you.
ListPlot[data, ScalingFunctions -> {{Minus@*Log, Exp@*Minus}, "Log"}, AxesOrigin -> {1, 1}]
. $\endgroup$