如何强制Y轴只在Matplotlib中使用整数?

Jay*_*uso 49 python matplotlib axis-labels

我正在使用matplotlib.pyplot模块绘制直方图,我想知道如何强制y轴标签只显示整数(例如0,1,2,3等)而不是小数(例如0,0.5) ,1,1.5,2.等).

我正在查看指导说明,并怀疑答案位于matplotlib.pyplot.ylim附近,但到目前为止,我只能找到设置最小和最大y轴值的东西.

def doMakeChart(item, x):
    if len(x)==1:
        return
    filename = "C:\Users\me\maxbyte3\charts\\"
    bins=logspace(0.1, 10, 100)
    plt.hist(x, bins=bins, facecolor='green', alpha=0.75)
    plt.gca().set_xscale("log")
    plt.xlabel('Size (Bytes)')
    plt.ylabel('Count')
    plt.suptitle(r'Normal Distribution for Set of Files')
    plt.title('Reference PUID: %s' % item)
    plt.grid(True)
    plt.savefig(filename + item + '.png')
    plt.clf()
Run Code Online (Sandbox Code Playgroud)

gal*_*ath 113

这是另一种方式:

from matplotlib.ticker import MaxNLocator

ax = plt.figure().gca()
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
Run Code Online (Sandbox Code Playgroud)

  • 使用 ax.yaxis.get_major_locator().set_params(integer=True) 可以让您摆脱额外的导入。 (10认同)
  • 恕我直言,这应该是公认的答案 (5认同)
  • 这才是正确的做法! (2认同)
  • 为什么我们不能只处理 plt 对象,为什么我们必须处理 10 个不同的变量,ax、plt、gca 等。 (2认同)

Chr*_*ris 35

如果你有y数据

y = [0., 0.5, 1., 1.5, 2., 2.5]
Run Code Online (Sandbox Code Playgroud)

您可以使用此数据的最大值和最小值来创建此范围内的自然数列表.例如,

import math
print range(math.floor(min(y)), math.ceil(max(y))+1)
Run Code Online (Sandbox Code Playgroud)

产量

[0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用matplotlib.pyplot.yticks设置y刻度标记位置(和标签):

yint = range(min(y), math.ceil(max(y))+1)

matplotlib.pyplot.yticks(yint)
Run Code Online (Sandbox Code Playgroud)

  • 嗯,确实读过。但我发现大多数时候文档完全无法理解。我真的很难将文档翻译成有意义的代码。`get_view_interval()` 是猜测达到极限的方法,但我从文档中不知道如何将该调用链接到相关图中的 y 轴。`yLimits = matplotlib.pyplot.yticks(get_view_interval())`? (3认同)

小智 7

这对我有用:

import matplotlib.pyplot as plt
plt.hist(...

# make the y ticks integers, not floats
yint = []
locs, labels = plt.yticks()
for each in locs:
    yint.append(int(each))
plt.yticks(yint)
Run Code Online (Sandbox Code Playgroud)

  • 描述给定代码解决问题的原因总是一个好主意。请[编辑]您的答案以包含这样的描述。 (2认同)