removing leading 0 from matplotlib tick label formatting

How can I change the ticklabels of numeric decimal data (say between 0 and 1) to be "0", ".1", ".2" rather than "0.0", "0.1", "0.2" in matplotlib? For example,

hist(rand(100))
xticks([0, .2, .4, .6, .8])

will format the labels as "0.0", "0.2", etc. I know that this gets rid of the leading "0" from "0.0" and the trailing "0" on "1.0":

from matplotlib.ticker import FormatStrFormatter
majorFormatter = FormatStrFormatter('%g')
myaxis.xaxis.set_major_formatter(majorFormatter) 

That's a good start, but I also want to get rid of the "0" prefix on "0.2" and "0.4", etc. How can this be done?

Answers


Although I am not sure it is the best way, you can use a matplotlib.ticker.FuncFormatter to do this. For example, define the following function.

def my_formatter(x, pos):
    """Format 1 as 1, 0 as 0, and all values whose absolute values is between
    0 and 1 without the leading "0." (e.g., 0.7 is formatted as .7 and -0.4 is
    formatted as -.4)."""
    val_str = '{:g}'.format(x)
    if np.abs(x) > 0 and np.abs(x) < 1:
        return val_str.replace("0", "", 1)
    else:
        return val_str

Now, you can use majorFormatter = FuncFormatter(my_formatter) to replace the majorFormatter in the question.

Complete example

Let's look at a complete example.

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

def my_formatter(x, pos):
    """Format 1 as 1, 0 as 0, and all values whose absolute values is between
    0 and 1 without the leading "0." (e.g., 0.7 is formatted as .7 and -0.4 is
    formatted as -.4)."""
    val_str = '{:g}'.format(x)
    if np.abs(x) > 0 and np.abs(x) < 1:
        return val_str.replace("0", "", 1)
    else:
        return val_str

# Generate some data.
np.random.seed(1) # So you can reproduce these results.
vals = np.random.rand((1000))

# Set up the formatter.
major_formatter = FuncFormatter(my_formatter)

plt.hist(vals, bins=100)
ax = plt.subplot(111)
ax.xaxis.set_major_formatter(major_formatter)
plt.show()

Running this code generates the following histogram.

Notice the tick labels satisfy the conditions requested in the question.


Multiple all your values by 10?


Need Your Help

Very strange — Adding a compound index makes queries much slower (MongoDB)

performance mongodb indexing

I'm having a problem that should be very simple but I'm stumped on this one -- maybe I'm misunderstanding something about compound indexes in MongoDB. To reproduce this problem, I have created a

For command using devenv.exe runs too quickly

command-line vdproj

So I have a command I want to run which looks like the following:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.