如何将直方图轴始终设置为整数?

时间:2019-02-19 16:42:42

标签: python pandas matplotlib

我正在使用一些代码来运行和使用Python生成报告。此代码从在线调查工具获取信息,并对数据运行基本统计信息,然后根据结果生成Word文档。我沿途创建了许多图形。我具有以下功能来帮助我构建一些直方图。

def histogram_by(df, df_column, sort_by, height):
    """
    df = location of the data
    df_column = column in the data frame with the required data
    sort_by = the column used to catagorize the data
    height = the calculated height of the subplots, changes depending on number of plots
    """
    f, ax = generate_subplots(df[sort_by].nunique(), height)
    df[df_column].hist(
        ax=ax,
        by=df[sort_by],
        xrot=360,
        bins=np.linspace(1, 5, 9))
    plt.tight_layout()
    plt.savefig('plt.png')

This is the output if i have enough data for the Y-Axis to force integers

Data without forced integers

因此,在第一张图片中,它显示了当有足够的数据强制整数时图形的外观。大多数情况下会发生这种情况。

在第二张图片中,没有足够的数据来强制Y轴生成整数,因此它会创建浮点数。与“正确”输出相比,此版本中的图形似乎也宽一些。有什么想法吗?

数据量根据接受调查的人数而变化。有什么方法可以强制Y轴使用整数而不是默认为浮点数?

感谢您抽出宝贵的时间来帮助我。

最好, 克里斯

1 个答案:

答案 0 :(得分:1)

首先创建一个最小的问题示例。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(4,1.7))

data = np.random.randint(1,9, size=52)
ax.hist(data, bins=np.arange(0,9)+0.5, ec="k")

plt.show()

enter image description here

现在,您可以通过告诉默认AutoLocator仅使用整数来消除y轴上的小数位

ax.locator_params(axis='y', integer=True)

结果:

enter image description here