我正在尝试运行以下代码:

variable_values = #numpy vector, one dimension, 5053 values between 1 and 0.
label_values = #numpy vector, one dimension, 5053 values, discrete value of either 1 OR 0.
x = variable_values[variable_values != '?'].astype(float)
y = label_values[variable_values != '?'].astype(float)

print np.max(x) #prints 0.90101
print np.max(y) #prints 1.0


N = 5053
ind = np.arange(N)    # the x locations for the groups
width = 0.45       # the width of the bars: can also be len(x) sequence
n, bins, patches = plt.hist(x, 5, stacked=True, normed = True)

#Stack the data
plt.figure()
plt.hist(x, bins, stacked=True, normed = True)
plt.hist(y, bins, stacked=True, normed = True)
plt.show()


我要实现的是下图:



每个条上的颜色根据其label的值是1还是0进行拆分。

不幸的是,我目前的输出是:



有两件事与此不正确-首先没有正确堆叠。第二,Y轴上的值上升到1.6,但我相信Y轴应保存属于每个子组的数据量(因此,如果所有数据的值都为0-0.25,显示数据的条形将是第一个)。

最佳答案

variable_values = #numpy向量,一维,介于1和0之间的5053个值。
  
  label_values = #numpy向量,一维,5053个值,离散
  值为1或0。


您正在尝试对x和y使用相同的垃圾箱。 x可能是0-1,不包括边缘。因此y不在您要绘制的垃圾箱范围内。

这是1.6,因为您选择了对图进行归一化。将该参数设置为false可获得实际计数。

这应该解决以下大多数问题:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.random(5053)
y = np.random.random_integers(0,1, 5053)

# x = variable_values[variable_values != '?'].astype(float)
# y = label_values[variable_values != '?'].astype(float)

print np.max(x) #prints 0.90101
print np.max(y) #prints 1.0


N = 5053
ind = np.arange(N)    # the x locations for the groups
width = 0.45       # the width of the bars: can also be len(x) sequence
n, bins, patches = plt.hist(x, 5, stacked=True, normed = True)

bins[0] = 0
bins[-1] = 1

#Stack the data
plt.figure()
plt.hist(y, bins, stacked=True, normed = False)
plt.hist(x, bins, stacked=True, normed = False)
plt.show()

关于python - 堆叠的直方图不会堆叠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21765357/

10-12 19:34