我的代码如下:
var latestMth
d3.csv(barDataCSV_Mth, function(rows) {
x = rows.map(function(d) {
return {
"month": parseDate(d.dt)
};
})
latestMth = d3.max(d3.values(x));
});
" barDataCSV_Mth"中的数据是这样的:
measure,group,dt,amount
Revenue,B,11/1/2015,10
Revenue,B,12/1/2015,23456
Revenue,B,1/1/2016,2346
Revenue,B,2/1/2016,2346
Revenue,B,3/1/2016,656
Revenue,B,4/1/2016,346
Revenue,B,5/1/2016,2346
Revenue,B,6/1/2016,346
Revenue,B,7/1/2016,2346
为什么它将2015年作为最大值返回?
注意
我正在使用d3.v3。
解析日期函数为:var parseDate = d3.time.format("%m/%d/%Y").parse;
答案 0 :(得分:3)
#!/usr/bin/env python
with open("file1.txt", "r") as file1, open("file2.txt", "r") as file2, /
open("file3.txt", "r") as file3, open("file4.txt", "r") as file4:
d1 = {}
d2 = {}
d3 = {}
d4 = {}
dicts = [d1, d2, d3, d4]
#d1 = {key1: [x1, x2, x3], key2: [y1, y2, y3], key3: [z1, z2, z3]}
#d2 = {key1: [x4, x5, x6],key2: [y4, y5, y6], key3: [z4, z5, z6]}
#d3 = {key1: [x7, x8, x9], key2: [y7, y8, y9], key3: [z7, z8, z9]}
#d4 = {x2: [a, b, c], y2: [d, e, f], z2: [g, h, i]}
for b in file1:
row = b.strip().split('\t')
if row[0] not in d1:
d1[row[0]] = row[1], row[3], row[4]
for c in file2:
row = c.strip().split('\t')
if row[0] not in d2:
d2[row[0]] = row[1:]
for f in file3:
row = f.strip().split('\t')
if row[0] not in d3:
d3[row[0]] = row[1:]
for m in file4:
row = m.strip().split('\t')
if row[0] not in d4:
d4[row[0]] = row[1], row[3], row[2]
final_dict = {}
for k in (dicts):
for key, value in k.iteritems():
final_dict[key].append(value)
print final_dic
#key1 x1 a b x2 x3 x4 x5 x8 x9
#key2 y1 d e y2 y3 y4 y5 y8 y9
#key3 z1 g h z2 z3 z4 z5 z8 z9
:
使用自然顺序
返回给定数组中的最大值
你现在拥有的是一系列对象,这就是它无法运作的原因。
解决方案1
一个选项是更改d3.max
变量,因此您可以使用x
可以使用的一组平面值:
d3.max
解决方案2
或者,如果您不想更改x = rows.map(function(d) {
return parseDate(d.dt)
});
latestMth = d3.max(d3.values(x));
console.log(latestMth);//returns Fri Jul 01 2016
,请不要使用x
,其中:
返回包含指定对象的属性值的数组。
相反,请使用d3.values
。
事实上,这个"解决方案2"是首选解决方案,因为map
是使用map
或d3.max
查找对象数组中最大/最小值的最常用方法:
d3.min
这样做,您可以将latestMth = d3.max(x.map(d=>d.month));
保留为对象数组:
x