You can plot it with matplotlib's loglog
. Here is a basic example:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0] + [2**(x-4) for x in range(8)])
f = lambda x: 10**x
plt.loglog(x, f(x), basex=2, basey=10)
As you can see, you can pass the x and y base seperately and it also gives 2**(-1)...
Here is a picture of the example:

I don't know if I understand the second part of your question.
EDIT I think i might understand now. Since it is not possible to have a 0 on a log scale, here is a symbolic approach:
On your scale, the smallest number on the x-axis was 2**(-4)
so I use 2**(-5)
as a symbolic zero an rename the ticks accordingly. This is done via xticks
:
plt.xticks([2**i for i in range(-5,4)], [r"0"] + [r"$2^{%d}$" %(int(i)) for i in range(-4,4)])
The first argument [2**i for i in range(-5,4)]
creates the positions of the ticks and the second argument the labels.
It now looks like this:

Remember: A "zero" here is actually a 2**(-5)
!