如何强制Y轴仅使用整数

问题描述 投票:0回答:4

我正在使用 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()
python matplotlib axis-labels
4个回答
262
投票

还有另一种方法:

from matplotlib.ticker import MaxNLocator

ax = plt.figure().gca()
ax.yaxis.set_major_locator(MaxNLocator(integer=True))

65
投票

如果您有 y 数据

y = [0., 0.5, 1., 1.5, 2., 2.5]

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

import math
print range(math.floor(min(y)), math.ceil(max(y))+1)

产量

[0, 1, 2, 3]

然后您可以使用 matplotlib.pyplot.yticks:

设置 y 刻度线位置(和标签)
yint = range(min(y), math.ceil(max(y))+1)

matplotlib.pyplot.yticks(yint)

14
投票

这对我有用:

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)

0
投票

使用其他建议与

plt.yticks()
对我有用,但会导致刻度线之间的间距不均匀。我原来的绘图的刻度间隔为 2.5,因此只需将每个位置转换为整数就会导致刻度距离交替为 2 和 3(这对我的情况来说是不合需要的)。如果其他人遇到同样的问题,这里是我针对均匀间距的整数刻度的解决方法:

import matplotlib.pyplot as plt
import numpy as np
plt.plot(...

locs, labels = plt.yticks()  # retrieve original tick values
dloc = np.ceil(locs[1] - locs[0]).astype(int)  # get tick spacing
dloc_int = int(dloc)  # define new integer tick spacing

new_yticks = np.arange(locs.min(), locs.max(), dloc_int, dtype=int)
plt.yticks(new_yticks)

通过将刻度间距间隔预定义为整数,然后在数组中生成新的 y 刻度值

new_yticks
,确保刻度之间的间距恒定,解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.