D3.js d3.time.format(“%Y”).parse; //将数据转换为层 var dataset=d3.layout.stack()([“redDelicious”、“mcintosh”、“oranges”、“pears”]).map(函数(水果){ 返

D3.js d3.time.format(“%Y”).parse; //将数据转换为层 var dataset=d3.layout.stack()([“redDelicious”、“mcintosh”、“oranges”、“pears”]).map(函数(水果){ 返,d3.js,D3.js,d3.time.format(“%Y”).parse; //将数据转换为层 var dataset=d3.layout.stack()([“redDelicious”、“mcintosh”、“oranges”、“pears”]).map(函数(水果){ 返回数据.map(函数(d){ 返回{ x:解析(d.年), y:+d[水果] }; }); })); //设置x、y和颜色 var x=d3.scale.ordinal() .domain(数据集[0])。映射(函数(d){ 返回d.x; })

d3.time.format(“%Y”).parse; //将数据转换为层 var dataset=d3.layout.stack()([“redDelicious”、“mcintosh”、“oranges”、“pears”]).map(函数(水果){ 返回数据.map(函数(d){ 返回{ x:解析(d.年), y:+d[水果] }; }); })); //设置x、y和颜色 var x=d3.scale.ordinal() .domain(数据集[0])。映射(函数(d){ 返回d.x; })) .rangeRoundBands([10,宽度-10],0.02); 变量y=d3.scale.linear() .domain([0,d3.max(数据集,函数(d)){ 返回d3.max(d,函数(d){ 返回d.y0+d.y; }); })]) .范围([高度,0]); 变量颜色=[“b33040”、“d25c4d”、“f2b447”、“d9d574”]; //定义和绘制轴 var yAxis=d3.svg.axis() .比例(y) .东方(“左”) .滴答声(5) .tickSize(-width,0,0) .d格式(函数(d){ 返回d }); var xAxis=d3.svg.axis() .比例(x) .orient(“底部”) .tickFormat(d3.time.format(“%Y”); svg.append(“g”) .attr(“类”、“y轴”) .呼叫(yAxis); svg.append(“g”) .attr(“类”、“x轴”) .attr(“变换”、“平移(0)”、“高度+”) .呼叫(xAxis); //为每个系列创建组,为每个段创建矩形 var group=svg.selectAll(“g.cost”) .数据(数据集) .enter().append(“g”) .attr(“类别”、“成本”) .样式(“填充”,功能(d,i){ 返回颜色[i]; }); var rect=groups.selectAll(“rect”) .数据(功能(d){ 返回d; }) .输入() .append(“rect”) .attr(“x”,函数(d){ 返回x(d.x); }) .attr(“y”,函数(d){ 返回y(d.y0+d.y); }) .attr(“高度”,功能(d){ 返回y(d.y0)-y(d.y0+d.y); }) .attr(“宽度”,x.rangeBand()) .on(“鼠标悬停”,函数(){ 样式(“显示”,空); }) .on(“mouseout”,函数(){ 样式(“显示”、“无”); }) .on(“mousemove”,函数(d){ var xPosition=d3.鼠标(this)[0]-15; var yPosition=d3.鼠标(this)[1]-25; attr(“transform”、“translate”(+xPosition+)、“+yPosition+”); 工具提示。选择(“文本”)。文本(d.y); }); //绘制图例 var legend=svg.selectAll(“.legend”) .数据(颜色) .enter().append(“g”) .attr(“类”、“图例”) .attr(“转换”,函数(d,i){ 返回“translate(30),+i*19+”; }); 图例。追加(“rect”) .attr(“x”,宽度-18) .attr(“宽度”,18) .attr(“高度”,18) .样式(“填充”,功能(d,i){ 返回颜色。slice().reverse()[i]; }); 图例。追加(“文本”) .attr(“x”,宽度+5) .attr(“y”,9) .attr(“dy”,“.35em”) .style(“文本锚定”、“开始”) .文本(功能(d,i){ 开关(一){ 案例0: 还“安居梨”; 案例1: 归还“海军橘子”; 案例2: 返回“麦金托什苹果”; 案例3: 返回“红色美味苹果”; } }); //准备工具提示位,初始显示隐藏 var tooltip=svg.append(“g”) .attr(“类”、“工具提示”) .样式(“显示”、“无”); 工具提示。追加(“rect”) .attr(“宽度”,30) .attr(“高度”,20) .attr(“填充”、“白色”) .样式(“不透明度”,0.5); 工具提示。追加(“文本”) .attr(“x”,15) .attr(“dy”,“1.2米”) .style(“文本锚定”、“中间”) .attr(“字体大小”,“12px”) .attr(“字体重量”、“粗体”)
svg{
字体:10px无衬线;
形状渲染:边缘清晰;
}
.轴线路径,
.轴线{
填充:无;
行程:#000;
}
路径域{
中风:无;
}
.y.勾选线{
行程:#ddd;
}

我做了一个组合,并弄乱了提供的有效负载。当我的团队正在构建API时,我可以控制我将得到的响应。我做了一个组合,并弄乱了提供的有效负载。当我的团队正在构建API时,我可以控制我将得到的响应。
const data = [
  {
    month: 1
    apples: ...,
    bananas: ...,
    cherries: ...,
    dates: ...,
  },
  {
    month: 2
    apples: ...,
    bananas: ...,
    cherries: ...,
    dates: ...,
  },
  {
    month: 3
    apples: ...,
    bananas: ...,
    cherries: ...,
    dates: ...,
  }
]