我正在尝试运行以下代码:
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的唯一值将显示数据的栏将是第一个。
答案 0 :(得分:2)
variable_values = #numpy vector,one dimension,5053介于1和0之间。
label_values = #numpy vector,one dimension,5053 values,discrete 值1或0。
你正在尝试为x和y使用相同的bin。 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()
答案 1 :(得分:2)
我可以建议一个更简单的解决方案:
variable_values=np.random.random(size=5053)
label_values=np.random.randint(0,2, size=5053)
plt.hist(variable_values, label='1')
plt.hist(variable_values[label_values==0], label='0')
plt.legend(loc='upper right')
plt.savefig('temp.png')
实际上,因为label_values
是1或0,所以甚至不需要堆叠histgram。只需制作1和0的直方图,然后在顶部叠加0的直方图。
使用堆栈直方图,虽然我更喜欢在有许多不同的类时使用:
plt.hist([variable_values[label_values==1],variable_values[label_values==0]], stacked=True, label=['1', '0'])