我正在尝试运行以下代码:
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/