我试图通过循环包含值的一系列数组来制作一系列直方图。对于每个数组,我的脚本都会生成一个单独的直方图。使用默认设置,这会产生直方图,其中频率最高的条形触及图形的顶部(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中的最大频率)?
答案 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.