好吧,我有3个表,从第一个表开始,取2个单元格的值,并将其放入第3个表中,然后从第3个表中将这些单元格的总和添加到一个单元格中,然后在另一个单元格中计数。例如:第一张桌子Jacob 1 Apple(在2个不同的行中写了2次)。这将以相同的方式进入第3个表,然后将对数字进行计数(2个数字)并将其写入第一个第2个单元格,并将其相加并写入另一个单元格。我想重做一次,因为我添加了一个新的名称或数字,这破坏了公式,并且公式从上面的单元格或下面的单元开始窃取。
链接:https://docs.google.com/spreadsheets/d/1a0NIeA2xlDzpK-C4Mvq1UANfYdUHc9gHli6U3v2L6r8/edit?usp=sharing
答案 0 :(得分:1)
删除 E:K
范围内的所有内容
将此公式粘贴到 E1 单元格中:
<!DOCTYPE html>
<html>
<head>
<script src="https://d3js.org/d3.v5.min.js"></script>
</head>
<body>
<script>
var margins = {
top: 20,
bottom: 300,
left: 30,
right: 100
};
var height = 150;
var width = 900;
var totalWidth = width + margins.left + margins.right;
var totalHeight = height + margins.top + margins.bottom;
var svg = d3.select('body')
.append('svg')
.attr('width', totalWidth)
.attr('height', totalHeight);
var graphGroup = svg.append('g')
.attr('transform', "translate(" + margins.left + "," + margins.top + ")");
var xScale = d3.scaleLinear()
.range([0, width]);
var data = [{
'age': 32.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 30.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 35.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 34.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 31,
'educ': 14.0,
'inlf': 1
}, {
'age': 54.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 37.0,
'educ': 16.0,
'inlf': 1
}, {
'age': 54.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 48.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 39.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 33.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 42.0,
'educ': 11,
'inlf': 1
}, {
'age': 30.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 43.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 43.0,
'educ': 10.0,
'inlf': 1
}, {
'age': 35.0,
'educ': 11,
'inlf': 1
}, {
'age': 43.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 39.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 45.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 35.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 42.0,
'educ': 16.0,
'inlf': 1
}, {
'age': 30.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 48.0,
'educ': 13.0,
'inlf': 1
}, {
'age': 45.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 31,
'educ': 12.0,
'inlf': 1
}, {
'age': 43.0,
'educ': 17.0,
'inlf': 1
}, {
'age': 59.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 32.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 31,
'educ': 17.0,
'inlf': 1
}, {
'age': 42.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 50.0,
'educ': 11,
'inlf': 1
}, {
'age': 59.0,
'educ': 16.0,
'inlf': 1
}, {
'age': 36.0,
'educ': 13.0,
'inlf': 1
}, {
'age': 51,
'educ': 12.0,
'inlf': 1
}, {
'age': 45.0,
'educ': 16.0,
'inlf': 1
}, {
'age': 42.0,
'educ': 11,
'inlf': 1
}, {
'age': 46.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 46.0,
'educ': 10.0,
'inlf': 1
}, {
'age': 51,
'educ': 14.0,
'inlf': 1
}, {
'age': 30.0,
'educ': 17.0,
'inlf': 1
}, {
'age': 30.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 57.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 31,
'educ': 16.0,
'inlf': 1
}, {
'age': 48.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 30.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 34.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 48.0,
'educ': 16.0,
'inlf': 1
}, {
'age': 45.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 51,
'educ': 12.0,
'inlf': 1
}, {
'age': 30.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 46.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 58.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 37.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 52.0,
'educ': 8.0,
'inlf': 1
}, {
'age': 52.0,
'educ': 10.0,
'inlf': 1
}, {
'age': 31,
'educ': 16.0,
'inlf': 1
}, {
'age': 55.0,
'educ': 14.0,
'inlf': 1
}, {
'age': 34.0,
'educ': 17.0,
'inlf': 1
}, {
'age': 55.0,
'educ': 14.0,
'inlf': 1
}, {
'age': 39.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 40.0,
'educ': 14.0,
'inlf': 1
}, {
'age': 43.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 48.0,
'educ': 8.0,
'inlf': 1
}, {
'age': 47.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 41,
'educ': 12.0,
'inlf': 1
}, {
'age': 36.0,
'educ': 8.0,
'inlf': 1
}, {
'age': 46.0,
'educ': 17.0,
'inlf': 1
}, {
'age': 34.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 41,
'educ': 12.0,
'inlf': 1
}, {
'age': 51,
'educ': 12.0,
'inlf': 1
}, {
'age': 33.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 52.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 58.0,
'educ': 9.0,
'inlf': 1
}, {
'age': 34.0,
'educ': 10.0,
'inlf': 1
}, {
'age': 31,
'educ': 12.0,
'inlf': 1
}, {
'age': 48.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 32.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 49.0,
'educ': 17.0,
'inlf': 1
}, {
'age': 32.0,
'educ': 15.0,
'inlf': 1
}, {
'age': 58.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 50.0,
'educ': 6.0,
'inlf': 1
}, {
'age': 60.0,
'educ': 14.0,
'inlf': 1
}, {
'age': 50.0,
'educ': 12.0,
'inlf': 1
}, {
'age': 56.0,
'educ': 14.0,
'inlf': 1
}, {
'age': 51,
'educ': 9.0,
'inlf': 1
}, {
'age': 54.0,
'educ': 17.0,
'inlf': 1
}, {
'age': 59.0,
'educ': 13.0,
'inlf': 1
}, {
'age': 46.0,
'educ': 9.0,
'inlf': 1
}, {
'age': 46.0,
'educ': 15.0,
'inlf': 1
}, {
'age': 39.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 44.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 33.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 33.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 48.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 30,
'educ': 12.0,
'inlf': 0
}, {
'age': 45.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 45.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 32.0,
'educ': 13.0,
'inlf': 0
}, {
'age': 47.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 34.0,
'educ': 13.0,
'inlf': 0
}, {
'age': 37.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 36.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 47.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 48.0,
'educ': 16.0,
'inlf': 0
}, {
'age': 42.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 33.0,
'educ': 13.0,
'inlf': 0
}, {
'age': 46.0,
'educ': 10,
'inlf': 0
}, {
'age': 47.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 44.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 36.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 30,
'educ': 17.0,
'inlf': 0
}, {
'age': 55.0,
'educ': 14.0,
'inlf': 0
}, {
'age': 45.0,
'educ': 16.0,
'inlf': 0
}, {
'age': 47.0,
'educ': 17.0,
'inlf': 0
}, {
'age': 46.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 49.0,
'educ': 10,
'inlf': 0
}, {
'age': 49.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 45.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 38.0,
'educ': 17.0,
'inlf': 0
}, {
'age': 47.0,
'educ': 10.0,
'inlf': 0
}, {
'age': 54.0,
'educ': 13.0,
'inlf': 0
}, {
'age': 40,
'educ': 10,
'inlf': 0
}, {
'age': 43.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 30,
'educ': 16.0,
'inlf': 0
}, {
'age': 47.0,
'educ': 17.0,
'inlf': 0
}, {
'age': 35.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 45.0,
'educ': 16.0,
'inlf': 0
}, {
'age': 33.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 54.0,
'educ': 16.0,
'inlf': 0
}, {
'age': 35.0,
'educ': 8.0,
'inlf': 0
}, {
'age': 30,
'educ': 12.0,
'inlf': 0
}, {
'age': 55.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 34.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 38.0,
'educ': 13.0,
'inlf': 0
}, {
'age': 45.0,
'educ': 10,
'inlf': 0
}, {
'age': 47.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 39.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 36.0,
'educ': 14.0,
'inlf': 0
}, {
'age': 33.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 50.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 58.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 49.0,
'educ': 17.0,
'inlf': 0
}, {
'age': 40,
'educ': 14.0,
'inlf': 0
}, {
'age': 50,
'educ': 12.0,
'inlf': 0
}, {
'age': 53.0,
'educ': 9.0,
'inlf': 0
}, {
'age': 36.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 46.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 36.0,
'educ': 12.0,
'inlf': 0
}, {
'age': 53.0,
'educ': 14.0,
'inlf': 0
}, {
'age': 40.0,
'educ': 16.0,
'inlf': 0
}];
var colorScale = d3.scaleLinear()
.range(["#e7eef8", "#003366"]);
xScale.domain(d3.extent(data, function(d) {
return d.educ;
}));
colorScale.domain(d3.extent(data, function(d) {
return d.age;
}));
// bin the data based on top bottom and x-position
var bins = d3.nest()
.key(function(d) { return [(d.inlf ? 1 : 0), d.educ] })
.entries(data);
// calculate positions (build the pyramid)
var r = 3;
bins.forEach( (bin) => {
var ds = bin.values;
var br = 1, n = 1;
while (br < ds.length){
br += n; n += 1;
}
n -= 1
var c = 0; rn = n; g = 0;
var s = r * 2 + 3;
ds.forEach((d)=>{
d.y = (rn - n) * s;
d.x = (c * s);
d.g = g;
c += 1;
if (c == n){
c = 0;
n -= 1;
g += 1
}
});
});
// re-bin by age and row so that we can traslate the rows
var binsAndRow = d3.nest()
.key(function(d) { return [(d.inlf ? 1 : 0), d.educ]; })
.key(function(d) { return d.g; })
.entries(data);
// draw circles
var x = graphGroup.selectAll("g")
.data(binsAndRow)
.enter()
.append("g")
.attr("class", (d) => "bin " + "b" + d.key)
.selectAll("g")
.data( (d) => {
return d.values
})
.enter()
.append("g")
.attr("class", (d) => "row " + "r" + d.key)
.selectAll("circle")
.data( (d) => {
return d.values
})
.enter()
.append("circle")
.attr("r", 3)
.attr("cx", function(d) {
return d.x;
})
.attr("cy", function(d) {
return d.y;
})
.style('fill', function(d) {return colorScale(d.age)});
// position the pyramids
graphGroup
.selectAll(".bin")
.attr("transform", function(d){
var bb = this.getBBox(),
xPos = (xScale(d.key.split(",")[1]) - bb.width/2),
isFlip = d.key.startsWith("1"),
yPos = isFlip ? height - 20 : height + 50,
t = "translate(" + xPos + "," + yPos + ")";
if (isFlip) t+= "scale(1,-1)";
return t;
})
.selectAll(".row")
.attr("transform", function(d) {
var pbb = this.parentNode.getBBox();
var bb = this.getBBox();
return "translate(" + ((pbb.width - bb.width)/2) + "," + 0 + ")";
});
graphGroup.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(xScale));
graphGroup.append('line')
.attr('x1', xScale(5))
.attr('x2', xScale(17))
.attr('y1', height - 5)
.attr('y2', height - 5)
.style('stroke', "#000");
graphGroup.append('line')
.attr('x1', xScale(5))
.attr('x2', xScale(17))
.attr('y1', height + 35)
.attr('y2', height + 35)
.style('stroke', "#000");
graphGroup.append('line')
.attr('x1', xScale(5))
.attr('x2', xScale(12))
.attr('y1', height - 5)
.attr('y2', height - 5)
.style('stroke', "#b8cce4")
.style('stroke-width', "5px");
graphGroup.append('line')
.attr('x1', xScale(12))
.attr('x2', xScale(14))
.attr('y1', height - 5)
.attr('y2', height - 5)
.style('stroke', "#4f81b9")
.style('stroke-width', "5px");
graphGroup.append('rect')
.attr('x', xScale(12))
.attr('y', height - 10)
.attr('width', 5)
.attr('height', 10)
.style('fill', "#f6d18b");
graphGroup.append('line')
.attr('x1', xScale(5))
.attr('x2', xScale(11))
.attr('y1', height + 35)
.attr('y2', height + 35)
.style('stroke', "#b8cce4")
.style('stroke-width', "5px");
graphGroup.append('line')
.attr('x1', xScale(11))
.attr('x2', xScale(12))
.attr('y1', height + 35)
.attr('y2', height + 35)
.style('stroke', "#4f81b9")
.style('stroke-width', "5px");
graphGroup.append('rect')
.attr('x', xScale(11.7))
.attr('y', height + 30)
.attr('width', 5)
.attr('height', 10)
.style('fill', "#f6d18b");
</script>
</body>
</html>