我有一个程序(关于一些人口的模型)产生一些数据(我们感兴趣的是:排名和支付),我用它绘制两个直方图。
rank = [3, 6, 7, 15,..., 1, 2] payoffs = [334, 54, 123, 34,..., 12, 100]
答案 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()
希望它有所帮助。