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