我想创建一个堆叠直方图.如果我有一个由三个等长数据集组成的二维数组,这很简单.代码和图片如下:
import numpy as np
from matplotlib import pyplot as plt
# create 3 data sets with 1,000 samples
mu, sigma = 200, 25
x = mu + sigma*np.random.randn(1000,3)
#Stack the data
plt.figure()
n, bins, patches = plt.hist(x, 30, stacked=True, normed = True)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用具有不同长度的三个数据集的类似代码,则结果是一个直方图覆盖另一个直方图.有什么办法可以用混合长度数据集进行叠加直方图吗?
##Continued from above
###Now as three separate arrays
x1 = mu + sigma*np.random.randn(990,1)
x2 = mu + sigma*np.random.randn(980,1)
x3 = mu + sigma*np.random.randn(1000,1)
#Stack the data
plt.figure()
plt.hist(x1, bins, stacked=True, normed = True)
plt.hist(x2, bins, …Run Code Online (Sandbox Code Playgroud) 我想通过让Y轴显示整个数据集大小中每列的百分比而不是绝对值来比较两个直方图.那可能吗?我正在使用Pandas和matplotlib.谢谢
我正在尝试获取已经分箱数据的直方图.我一直在尝试使用bar()它,但我似乎无法弄清楚如何使它成为像这样的阶梯式直方图,而不是填充的直方图.

有没有办法告诉matplotlib"规范化"直方图,使其面积等于指定值(1除外)?
选项"normed = 0"in
n, bins, patches = plt.hist(x, 50, normed=0, histtype='stepfilled')
Run Code Online (Sandbox Code Playgroud)
只是把它带回频率分布.
我正在创建在数据框中组织并按天分组的数据直方图。有时可能会出现数据完全为空的情况。因此,当我使用该属性绘制直方图时normed = True,我期望有一个以 0 为中心且高度等于 1 的 bin。但是,我发现高度等于 bin 的数量。我怎样才能解决这个问题?我想用直方图来表示概率密度函数,所以最大值应该是1。
代码示例和输出:
plt.rcParams['figure.figsize'] = 10, 4
data = np.zeros((1000))
l = plt.hist(data,normed = True, bins = 100)
Run Code Online (Sandbox Code Playgroud)
编辑:我现在看到该属性normed已被弃用。但是,如果我尝试使用该属性density,则会收到错误AttributeError: Unknown property density
我试图绘制标准直方图,但是在y轴上得到1作为最大值,我得到不同的数字.
对于数组k =(1,4,3,1)
import numpy as np
def plotGraph():
import matplotlib.pyplot as plt
k=(1,4,3,1)
plt.hist(k, normed=1)
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
plotGraph()
Run Code Online (Sandbox Code Playgroud)
我得到这个直方图,看起来不像诺曼.

对于不同的数组k =(3,3,3,3)
import numpy as np
def plotGraph():
import matplotlib.pyplot as plt
k=(3,3,3,3)
plt.hist(k, normed=1)
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
plotGraph()
Run Code Online (Sandbox Code Playgroud)
我得到这个直方图,最大y值是10.

对于不同的k,即使normed = 1或normed = True,我也得到不同的y的最大值.
为什么规范化(如果有效)会根据数据发生变化,如何使y的最大值等于1?
更新:
我试图通过在matplotlib中绘制条形高度总和为1的直方图来实现CarstenKönig的答案并得到非常奇怪的结果:
import numpy as np
def …Run Code Online (Sandbox Code Playgroud) 我想在同一个图形上绘制直方图和线图.但是,要做到这一点,我需要将直方图作为概率质量函数,所以我希望在y轴上得到一个概率值.但是,我不知道该怎么做,因为使用该normed选项没有帮助.下面是我的源代码和使用过的数据的预览.我会非常感谢所有的建议.
data = [12565, 1342, 5913, 303, 3464, 4504, 5000, 840, 1247, 831, 2771, 4005, 1000, 1580, 7163, 866, 1732, 3361, 2599, 4006, 3583, 1222, 2676, 1401, 2598, 697, 4078, 5016, 1250, 7083, 3378, 600, 1221, 2511, 9244, 1732, 2295, 469, 4583, 1733, 1364, 2430, 540, 2599, 12254, 2500, 6056, 833, 1600, 5317, 8333, 2598, 950, 6086, 4000, 2840, 4851, 6150, 8917, 1108, 2234, 1383, 2174, 2376, 1729, 714, 3800, 1020, 3457, 1246, 7200, 4001, 1211, 1076, 1320, …Run Code Online (Sandbox Code Playgroud) matplotlib ×7
python ×7
histogram ×3
plot ×2
area ×1
numpy ×1
pandas ×1
python-2.7 ×1
scipy ×1