我的代码中的一个函数接受一个数字数组,并将这些数字的第一个数字和它们出现在数组中的次数放入映射中。例如,对于
的数组[1539, 1390, 1023, 2642, 3912, 7419, 7129, 9520, 2239]
生成的地图将是
{"1" => 3, "2" => 2, "3" => 1, "7" => 2, "9" => 1}
对于我现在正在处理的功能,我必须获取生成的地图并将其转换为具有百分比的地图。但问题是,我必须使用仅 reduce()和map()函数。
到目前为止,我只知道如何实际计算物理频率,就像我之前所做的那样,但我不知道如何使用reduce()将它们全部转换为百分比。到目前为止,这是我的代码:
function toPercentages(benfordMap) {
let keys = [ ...benfordMap.keys()];
let values = [ ...benfordMap.values()];
values.reduce(
(acc, currVal) => {
// do something
})
return values;
}
我有一个一般想法,我觉得我可以使用我用来计算频率的代码,但我不知道如何合并语法。我的频率代码如下:
function freqs(items) {
var Frequencies = new Map();
items.reduce(
(acc, currVal) => (
acc[currVal] = ++acc[currVal] || 1, acc
),
{}
);
for (var x in items){
Frequencies.set(x, items[x]);
}
return Frequencies;
}
我对Javascript过于陌生,所以我不确切知道reduce()函数的确切位置,我会添加百分比计算代码。有人能指出我正确的方向吗?
答案 0 :(得分:3)
我不确定,我理解正确,但无论如何检查下面的代码:
import pandas as pd
import matplotlib.pyplot as plt
s = pd.Series(
[8, 24, 21, 23, 24],
index = ["Your Plan", "Benchmark", "Region", "Industry", "Size"]
)
#Set descriptions:
plt.title("INSERT TITLE HERE, PLEASE")
plt.ylabel('Percentage of EEs Waiving')
#Set tick colors:
ax = plt.gca()
ax.tick_params(axis='x', colors='black')
ax.tick_params(axis='y', colors='black')
#Plot the data:
my_colors = ['#ffc000','#305496', '#8ea9db', '#b4c6e7', '#D9E1F2'] #red, green, blue, black, etc.
s.plot(
kind="bar",
color=my_colors,
)
# Rotate the desired axis (or undo the rotation)
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=0)
# Set the Y Axis Limits
ax.set_ylim([0,100])
#Adds data labels to top of bars
for p in ax.patches[1:]:
h = p.get_height()
x = p.get_x()+p.get_width()/2.
if h != 0:
ax.annotate("%g" % p.get_height()+'%', xy=(x,h), xytext=(0,8), rotation=0,
textcoords="offset points", ha="center", va="bottom")
plt.show()
plt.savefig("PlanOffered.png")