2017-07-04 23 views
0

我有以下问题。我有一个7列的阵列。我想要1,2和5列的堆叠直方图,这样就有3个横条堆叠在每列中不同元素的数量上。所以对于第1列,我有9个值,4和1的值与3.在第2列中,我有3个值3和7的值4.在列5中,我有不同数量的值。我有一个appoach,但它非常脏,我只能绘制列1和2.此外,我想绘制一个标签到不同的酒吧,以显示他们正在显示的数字。Python:在numpy数组中创建具有不同数值的堆栈直方图

bestof10= [4.041970802919708228e-01 4.000000000000000000e+00 4.000000000000000000e+00 6.710000000000000853e+01 5.500000000000000444e-01 4.000000000000000000e+00 6.000000000000000000e+01 
    3.730468750000000000e-01 4.000000000000000000e+00 4.000000000000000000e+00 1.932000000000000171e+02 7.000000000000000666e-01 6.000000000000000000e+00 6.200000000000000000e+01 
    3.626570915619389823e-01 4.000000000000000000e+00 3.000000000000000000e+00 3.900000000000000000e+01 5.000000000000000000e-01 4.000000000000000000e+00 5.300000000000000000e+01 
    3.568320278503046006e-01 4.000000000000000000e+00 4.000000000000000000e+00 8.640000000000000568e+01 6.000000000000000888e-01 7.000000000000000000e+00 6.300000000000000000e+01 
    3.527336860670193808e-01 4.000000000000000000e+00 4.000000000000000000e+00 6.780000000000001137e+01 6.000000000000000888e-01 3.000000000000000000e+00 5.900000000000000000e+01 
    3.521825396825397081e-01 4.000000000000000000e+00 4.000000000000000000e+00 1.568000000000000114e+02 7.000000000000000666e-01 1.000000000000000000e+00 5.700000000000000000e+01 
    3.432835820895522305e-01 3.000000000000000000e+00 4.000000000000000000e+00 8.904999999999999716e+01 6.500000000000000222e-01 7.000000000000000000e+00 4.200000000000000000e+01 
    3.374888691006233121e-01 4.000000000000000000e+00 3.000000000000000000e+00 3.194999999999999929e+01 4.500000000000000111e-01 7.000000000000000000e+00 5.600000000000000000e+01 
    3.364879074658254643e-01 4.000000000000000000e+00 4.000000000000000000e+00 2.430000000000000000e+02 7.500000000000000000e-01 5.000000000000000000e+00 6.100000000000000000e+01 
    3.244781783681214282e-01 4.000000000000000000e+00 3.000000000000000000e+00 8.100000000000001421e+01 6.000000000000000888e-01 6.000000000000000000e+00 5.500000000000000000e+01] 

a = np.bincount(bestof10[:,1].astype(int)) 
ab = np.nonzero(a)[0] 
a = a[ab] 
a = tuple(a) 

b = np.bincount(bestof10[:,2].astype(int)) 
bb = np.nonzero(b)[0] 
b = b[bb] 
b = tuple(b) 

histogramParas=np.column_stack((a,b)) 

N = 2 

ind = np.arange(N) 
width = 0.35 

p1 = plt.bar(ind, histogramParas[0], width, color='r') 
p2 = plt.bar(ind, histogramParas[1], width, color='y',bottom=histogramParas[0]) 

plt.ylabel('Scores') 
plt.title('Scores by group and gender') 
plt.xticks(ind+width/2., ('Radius', 'FRC')) 

plt.show() 

enter image description here

编辑 应该像这样:

enter image description here

+0

请添加用于创建给定图像的代码。 –

+0

我没有创建图片,我只是想展示堆叠的酒吧应该如何看起来像 – Varlor

+0

然后你真的有两个问题:“我如何制作这样的图?和“我该如何索引这个数组?”第二个答案是'np.array(x).reshape(7,-1)[[0,1,4]]''。不确定第一个。 –

回答

0

首先,你需要得到你的列表为2D numpy的阵列。当你知道你有多少列有这个很简单:

x = np.array(bestof10) 
x = x.reshape(-1, 7) 

所以,现在你有10行7列的二维数组(形状=(10,7))。所以现在你可以用matplotlib轻松绘制你的直方图。

fig, ax = plt.subplots() 
_ = ax.hist([x[:, 1], x[:, 2], x[:, 5]], 
      stacked=True, normed=False) 

Histogram of columns 1,2 and 5

+0

谢谢你的赞美:)但我只想要第1,2列和第5列中不同元素的编号,就像我编辑中的草图。 – Varlor

相关问题