使用heapq.nlargest在For循环中重叠直方图 - Python

时间:2018-02-01 16:31:00

标签: python arrays pandas histogram overlapping

目前我已经创建了一个for循环,循环遍历我的数组并将结果转储到PDF上但是我在将它与heapq.nlargest结合时遇到了麻烦。 我希望将我的直方图与每个带有pandas的数组的前10%得分重叠。

目前,代码是

  x = list(df1.columns.values)
fig = plt.figure(num=None, figsize=(30, 200),  dpi=80, facecolor='w', edgecolor='w')


for i in range(6):#(len(df1.ix[i])):
    val= x[i]   
    y = df1.iloc[:,i]
    yy = heapq.nlargest(len(df1.iloc[:,i])//10, df1.iloc[:,i])


    ax = fig.add_subplot(len(df1.ix[0]),3,i+1)   
    plt.hist(y, bins=np.logspace(-4, 3, 100))
    plt.hist(yy, bins=np.logspace(-4, 3, 100))

    plt.savefig('D:/All Documents/Frequency_Distribution_Scores.pdf')

当我介绍

yy = heapq.nlargest(len(df1.iloc[:,i])*p//100, (df1.iloc[:,i]))
plt.hist(yy, bins=np.logspace(-4, 3, 100))

似乎只绘制了我所有图形中第一个数组的前10%值,而不是找到每个数组的前10%。

任何人都有任何指示? 干杯

1 个答案:

答案 0 :(得分:0)

解决了!

x = list(df1.columns.values)
fig = plt.figure(num=None, figsize=(30, 200),  dpi=80, facecolor='w',  edgecolor='w')


for i in range(len(df1.ix[i])):
    val= x[i]   
    y = df1.iloc[:,i]
    yy_s = np.sort(df1.iloc[:,i])[::-1]
    yy_s_trim0 = yy_s[np.where(yy_s > 0)]
    yy_10 = yy_s_trim0[0:(len(yy_s_trim0)/10)]

    ax = fig.add_subplot(len(df1.ix[0]),3,i+1)   
    plt.hist(y, bins=np.logspace(-4, 3, 100))
    plt.hist(yy_10, bins=np.logspace(-4, 3, 100))