Number1
Number1

Reputation: 391

Matplotlib display axis as binary

I'm attempting to label the x-axis of my graph in binary instead of float values in Python 2.7. I'm attempting to use FormatStrFormatter('%b') which according to the documentation provided by the Python Software Foundation should work. I'd also like all the binary strings to be the same length of characters. I've also consulted this link.

The error I'm getting is:

ValueError: unsupported format character 'b' (0x62) at index 1

I've tried to do it like:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import FormatStrFormatter

fig, ax = plt.subplots()

ax.yaxis.set_major_formatter(FormatStrFormatter('%b'))
ax.yaxis.set_ticks(np.arange(0, 110, 10))

x = np.arange(1, 10, 0.1)
plt.plot(x, x**2)
plt.show()

Upvotes: 3

Views: 2152

Answers (2)

ImportanceOfBeingErnest
ImportanceOfBeingErnest

Reputation: 339210

You may use a StrMethodFormatter, this works well also with the b option.

StrMethodFormatter("{x:b}")

However leading zeros require to know how many of them you expect (here 7).

StrMethodFormatter("{x:07b}")

Complete example:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import StrMethodFormatter

fig, ax = plt.subplots()

ax.yaxis.set_major_formatter(StrMethodFormatter("{x:07b}"))
ax.yaxis.set_ticks(np.arange(0, 110, 10))

x = np.arange(1, 10, 0.1)
plt.plot(x, x**2)
plt.show()

enter image description here

Upvotes: 5

Florian Weimer
Florian Weimer

Reputation: 33719

Try this:

from matplotlib.ticker import FuncFormatter
…
ax.yaxis.set_major_formatter(FuncFormatter("{:b}".format))

It should work in Python 3.5.

Upvotes: 2

Related Questions