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

时间:2016-01-20 13:41:00

标签: python matplotlib histogram axis

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

我的问题是:如何使y轴的最大值取决于我的箱子中出现的最大频率?我希望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中的最大频率)?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这是你希望实现的目标?

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()返回带有x, y数据集的元组。因此,您可以调用y.max()来获取每组的最大值。 Source.