【问题标题】:How to multiply the y-axis values of a histogram by a fixed number in Python如何将直方图的y轴值乘以Python中的固定数字
【发布时间】:2019-02-21 11:44:43
【问题描述】:

我有一个要使用直方图绘制的数据列表。我想分别缩放每个情节的y-axis。如果我喜欢以下内容,它会将每个绘图的 y-axis 缩放 10。

protocols = {}
types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}

for protname, values in protocols.items():
    fig, ax1 = plt.subplots()
    ax1.hist(values["col_data"], facecolor='blue', alpha=0.9, label=protname,align='left')
    y_vals = ax1.get_yticks()
    ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals])
    plt.legend()
    plt.show()

但是,我希望每个直方图的缩放比例是分开的。我尝试了以下方法,但它似乎没有按预期工作。

for protname, values in protocols.items():
    fig, ax1 = plt.subplots()
    ax1.hist(values["col_data"], facecolor='blue', alpha=0.9, label=protname,align='left')
    y_vals = ax1.get_yticks()
    ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data1" and ['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data2" and ['{:3.0f}'.format(x * 15) for x in y_vals if protname=="data3"]]])

    plt.legend()
    plt.show()

如果我们仅尝试将一个图设为ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data2"]),它只会将更改应用于第二个图,而将其他图留空。

【问题讨论】:

    标签: python python-3.x numpy matplotlib histogram


    【解决方案1】:

    起初我会对您为什么要操纵 y 轴值感兴趣,因为直方图值是您的数据的值 - 我看不出有什么理由在不失去数据意义的情况下更改它。

    也就是说,我的下一个问题通常是如果您有意将plt.subplots inside 设置为您的 for 循环,因为此命令的一个用例实际上是在一个图中创建多个子图 - 也许你以后会考虑的...

    但是,在不同迭代中应用不同因子的最简单方法是将它们作为另一个列表添加到循环中,zip

    factors = [10, 10, 15]
    for (protname, values), m in zip(protocols.items(), factors):
        ...
        ax1.set_yticklabels(['{:3.0f}'.format(x * m) for x in y_vals])
        ...
    

    【讨论】:

    • 当我将m 替换为我发布的.format() 函数时出现此错误。 TypeError: 'int' 对象不可迭代`
    • 我不太确定你到底做了什么。 m 代表您要使用的值 - 每次迭代都不同。不是列表,在上面的例子中,第一次运行是10,第二次运行10,第三次运行15
    • 谢谢。接受的答案!
    • 不客气 - 为了利益起见:您介意解释一下这种操纵的原因吗?
    • 我只是想比较一下当我们缩放值时我的预测是否会改变,现在我知道它没有!
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多