Python matplotlib限制为整数刻度位置

Joh*_*ohn 15 python matplotlib

我常常想制作计数条形图.如果计数很低,我经常得到不是整数的主要和/或次要刻度位置.我怎么能阻止这个?当数据是计数时,在1.5处打勾是没有意义的.

这是我的第一次尝试:

import pylab
pylab.figure()
ax = pylab.subplot(2, 2, 1)
pylab.bar(range(1,4), range(1,4), align='center')
major_tick_locs = ax.yaxis.get_majorticklocs()
if len(major_tick_locs) < 2 or major_tick_locs[1] - major_tick_locs[0] < 1:
    ax.yaxis.set_major_locator(pylab.MultipleLocator(1))
minor_tick_locs = ax.yaxis.get_minorticklocs()
if len(minor_tick_locs) < 2 or minor_tick_locs[1] - minor_tick_locs[0] < 1:
    ax.yaxis.set_minor_locator(pylab.MultipleLocator(1))
Run Code Online (Sandbox Code Playgroud)

当计数很小时工作正常但是当它们很大时,我得到很多很小的刻度:

import pylab
ax = pylab.subplot(2, 2, 2)
pylab.bar(range(1,4), range(100,400,100), align='center')
major_tick_locs = ax.yaxis.get_majorticklocs()
if len(major_tick_locs) < 2 or major_tick_locs[1] - major_tick_locs[0] < 1:
    ax.yaxis.set_major_locator(pylab.MultipleLocator(1))
minor_tick_locs = ax.yaxis.get_minorticklocs()
if len(minor_tick_locs) < 2 or minor_tick_locs[1] - minor_tick_locs[0] < 1:
    ax.yaxis.set_minor_locator(pylab.MultipleLocator(1))
Run Code Online (Sandbox Code Playgroud)

如何从第一个示例中获得所需的行为,并计算小数量,同时避免在第二个示例中发生的事情?

Flo*_*yer 25

您可以使用此MaxNLocator方法,如下所示:

    from pylab import MaxNLocator

    ya = axes.get_yaxis()
    ya.set_major_locator(MaxNLocator(integer=True))
Run Code Online (Sandbox Code Playgroud)

  • 或者如果你没有导入pylab,`matplotlib.ticker.MaxNLocator()`.(来自[这个答案](http://stackoverflow.com/a/27496811/2452770)) (2认同)

小智 5

我在绘制显示分数计数的直方图时遇到了类似的问题。以下是我解决该问题的方法:

plt.hist(x=[Dataset being counted])

# Get your current y-ticks (loc is an array of your current y-tick elements)
loc, labels = plt.yticks()

# This sets your y-ticks to the specified range at whole number intervals
plt.yticks(np.arange(0, max(loc), step=1))
Run Code Online (Sandbox Code Playgroud)