将一个直方图中的值识别为另一个直方图

时间:2018-02-24 18:16:34

标签: python python-3.x numpy matplotlib

我有一个程序(关于一些人口的模型)产生一些数据(我们感兴趣的是:排名和支付),我用它绘制两个直方图。

  • 数据: 我写了两个列表, rank payoffs ,其中第i个索引代表排名中的位置以及获得第i个成员的人数。 E.g:
rank    = [3, 6, 7, 15,..., 1, 2]
payoffs = [334, 54, 123, 34,..., 12, 100]
  • 直方图: 我将列表排名和支付绘制为直方图,我得到这样的结果: Ranking Payoffs

  • 问题: 我想识别在PAYOFFS'直方图 HIGHEST RANKING 的成员在哪里。我不知道怎么弄它们,以便用不同的颜色绘制它们。

1 个答案:

答案 0 :(得分:0)

我将发布我想出的答案,以防有人想要做出不同的事情;但我认为它可以大大改进。

首先,你有一些数据,例如,我们采用numpy(np)随机生成器,做ranks = [np.random.randint(0,10) for x in range(10)];并希望我想识别与最高直方图的bin相对应的那些(如问题中所述,这是我想要的),所以:

import matplolib.pyplot as plt histo = plt.hist(ranks) bins = histo[1]

(我这样做是因为我之前编码的方式,因此以这种方式实现起来更容易。)这里bins存储matplotlib为直方图生成的区间的限制。

然后, indexes_max = [i for i,x in enumerate(ranks) if x == max(bins)] 将数据的索引存储在最高的bin中。使用min函数将适用于最低值。

最后,我只需要以良好的方式绘制数据。这里,payoffs_temp是“支付直方图”的数据列表。

others = [payoffs_temp[i] for i in indexes_others]
maxs = [payoffs_temp[i] for i in indexes_max]
join = [others, maxs]
plt.hist(join, histtype='bar', stacked=True, label=['Rest', 'Max rank'])
plt.close()

所以整个代码(为此)看起来像这样:

import matplotlib.pyplot as plt
import numpy as np

ranks = [np.random.randint(0,10) for x in range(10)]
histo = plt.hist(ranks)
bins = histo[1]
indexes_max = [i for i,x in enumerate(ranks) if x == max(bins)]
others = [payoffs_temp[i] for i in indexes_others]
maxs = [payoffs_temp[i] for i in indexes_max]
join = [others, maxs]
plt.hist(join, histtype='bar', stacked=True, label=['Rest', 'Max rank'])
plt.close()

希望它有所帮助。