Python matplotlib 直方图:根据 bin 中的最大频率编辑 x 轴

Python matplotlib histogram: edit x-axis based on maximum frequency in bin

我试图通过遍历一系列包含值的数组来制作一系列直方图。对于每个数组,我的脚本都会生成一个单独的直方图。使用默认设置,这会生成直方图,其中频率最高的条形触及图形顶部(this is what it looks like now). I would like there to be some space: this is what I want it to look like.

我的问题是:如何使 y 轴的最大值依赖于我的 bin 中出现的最大频率?我希望 y 轴比我最长的条稍长。

我不能通过像这样设置值来做到这一点:

plt.axis([100, 350, 0, 5])  #[xmin, xmax, ymin, ymax]

matplotlib.pyplot.ylim(0,5) 

因为我正在绘制一系列直方图,并且最大频率变化很大。

我的代码现在看起来像这样:

import matplotlib.pyplot as plt

for LIST in LISTS:
    plt.figure()
    plt.hist(LIST)
    plt.title('Title')
    plt.xlabel("x-axis [unit]")
    plt.ylabel("Frequency")
    plt.savefig('figures/'LIST.png')

如何将 y 轴定义为 运行 从 0 到 1.1 *(1 bin 中的最大频率)?

如果我没理解错的话,这就是你希望达到的目的?

import matplotlib.pyplot as plt
import numpy.random as nprnd
import numpy as np

LISTS = []

#Generate data
for _ in range(3):
    LISTS.append(nprnd.randint(100, size=100))

#Find the maximum y value of every data set
maxYs = [i[0].max() for i in map(plt.hist,LISTS)]
print "maxYs:", maxYs

#Find the largest y 
maxY = np.max(maxYs)
print "maxY:",maxY

for LIST in LISTS:
    plt.figure()
    #Set that as the ylim
    plt.ylim(0,maxY)
    plt.hist(LIST)
    plt.title('Title')
    plt.xlabel("x-axis [unit]")
    plt.ylabel("Frequency")
    #Got rid of the safe function
plt.show()

生成最大 y 限制与 maxY 相同的图形。还有一些调试输出:

maxYs: [16.0, 13.0, 13.0]
maxY: 16.0

函数 plt.hist() returns 一个包含 x, y 数据集的元组。所以你可以调用 y.max() 来获得每组的最大值。 Source.