我试图有效地绘制一些数据,所以我可以想象它,但我遇到了一些麻烦。我有两个值。一个是离散的(0或1)并称为label
。另一个是0到1之间的连续值。我希望创建一个直方图,在X轴上会有很多条形,例如每个.25个数据一个,所以有四个条形,其中第一个有值0-0.25,第二个0.25-0.5,第三个0.5-0.75和第四个0.75-1。
然后y轴将被标签为1或0分割,所以我们最终得到如下图:
如果有任何有效的,智能的方式来分割我的数据(而不是只为这些值硬编码四个条形图)我也会对此感兴趣,尽管这可能需要另外一个问题。我会在运行此代码时发布它。
我将这两个值存储在numpy数组中,如下所示,但我不确定如何绘制这样的图形:
import numpy as np
import pylab as P
variable_values = trainData.get_vector('variable') #returns one dimensional numpy array of vals
label_values = trainData.get_vector('label')
x = alchemy_category_score_values[alchemy_category_score_values != '?'].astype(float) #removing void vals
y = label_values[alchemy_category_score_values != '?'].astype(float)
fig = plt.figure()
plt.title("Feature breakdown histogram")
plt.xlabel("Variable")
plt.xlim(0, 1)
plt.ylabel("Label")
plt.ylim(0, 1)
xvals = np.linspace(0,1,.02)
plt.show()
matplotlib教程显示以下代码粗略地实现我想要的,但我无法真正理解它是如何工作的(LINK):
P.figure()
n, bins, patches = P.hist(x, 10, normed=1, histtype='bar', stacked=True)
P.show()
非常感谢任何帮助。谢谢。
编辑:
我现在收到错误:
AssertionError: incompatible sizes: argument 'height' must be length 5 or scalar
我打印了两个numpy数组,它们长度相等,一个是离散的,另一个是连续的。这是我正在运行的代码:
x = variable_values[variable_values != '?'].astype(float)
y = label_values[label_values != '?'].astype(float)
print x #printing numpy arrays of equal size, x is continuous, y is discrete. Both of type float now.
print y
N = 5
ind = np.arange(N) # the x locations for the groups
width = 0.45 # the width of the bars: can also be len(x) sequence
p1 = plt.bar(ind, y, width, color='r') #error occurs here
p2 = plt.bar(ind, x, width, color='y',
bottom=x)
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind+width/2., ('G1', 'G2', 'G3', 'G4', 'G5') )
plt.yticks(np.arange(0,81,10))
plt.legend( (p1[0], p2[0]), ('Men', 'Women') )
plt.show()
答案 0 :(得分:2)
我认为来自同一个Matplotlib画廊的this other tutorial对您来说更具启发性......
请注意,第二系列数据在调用中有一个额外的参数:bottom
p1 = plt.bar(ind, menMeans, width, color='r', yerr=womenStd)
p2 = plt.bar(ind, womenMeans, width, color='y',
bottom=menMeans, yerr=menStd)
只需将menMeans
替换为x
,将womenMeans
替换为y
。