matplotlib hist()自动裁剪范围

时间:2014-05-27 10:46:38

标签: python matplotlib range histogram

我正在尝试在特定范围内创建一个histgram,但是matplotlib.pyplot.hist()函数会将范围裁剪到包含其中条目的bin。玩具示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.uniform(-100,100,1000)

nbins = 100
xmin = -500
xmax = 500

fig = plt.figure(); 
ax = fig.add_subplot(1, 1, 1)
ax.hist(x, bins=nbins,range=[xmin,xmax])  
plt.show()

给出范围为[-100,100]的图。为什么范围不是[-500,500]?

(我正在使用Enthought Canopy 1.4并且很抱歉,但我没有足够高的代表来发布情节图像。)

2 个答案:

答案 0 :(得分:15)

实际上,如果您使用range指定一个短于[-100, 100]的间隔,它就会起作用。例如,这项工作:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.uniform(-100, 100, 1000)
plt.hist(x, bins=30, range=(-50, 50))
plt.show()

如果您想在大于[x.min(), x.max()]的范围内绘制直方图,您可以更改图表的xlim属性。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.uniform(-100, 100, 1000)
plt.hist(x, bins=30)
plt.xlim(-500, 500)
plt.show()

答案 1 :(得分:0)

以下代码用于对两个子图进行相同的y轴限制

f ,ax = plt.subplots(1,2,figsize = (30, 13),gridspec_kw={'width_ratios': [5, 1]})
df.plot(ax = ax[0], linewidth = 2.5)
ylim = [df['min_return'].min()*1.1,df['max_return'].max()*1.1]
ax[0].set_ylim(ylim)
ax[1].hist(data,normed =1, bins = num_bin, color = 'yellow' ,alpha = 1) 
ax[1].set_ylim(ylim)