Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未对数据排序时未正确呈现棱锥体_Javascript_D3.js - Fatal编程技术网

Javascript 未对数据排序时未正确呈现棱锥体

Javascript 未对数据排序时未正确呈现棱锥体,javascript,d3.js,Javascript,D3.js,嗨,我用d3js搜索了一个金字塔图,没有找到任何不排序数据就呈现金字塔图的例子。我试图通过删除代码的排序部分来调整图表示例 以下是我所拥有的(): d3.pyramid=函数(){ 变量大小=[1,1], value=函数(d){返回d.value}, 协调; var percentageValues=函数(数据){ var值=data.map(值); var sum=d3.sum(值,函数(d){ 返回+d; }); var percentValues=data.map(函数(d,i){ d

嗨,我用d3js搜索了一个金字塔图,没有找到任何不排序数据就呈现金字塔图的例子。我试图通过删除代码的排序部分来调整图表示例

以下是我所拥有的():

d3.pyramid=函数(){
变量大小=[1,1],
value=函数(d){返回d.value},
协调;
var percentageValues=函数(数据){
var值=data.map(值);
var sum=d3.sum(值,函数(d){
返回+d;
});
var percentValues=data.map(函数(d,i){
d、 值=+值[i];
返回值[i]/sum*100;
});
//我不想排序,我想以相同的顺序显示数据,我通过高-中-低
//就像在高图中一样https://jsfiddle.net/nc7bzdx3/7/
/*percentValues.sort(函数(a,b){
返回b-a;
}); */
返回百分比值;
}
var坐标计算=功能(数据){
var w=大小[0],
h=尺寸[1],
比值=(w/2)/h,
PercentValue=PercentageValue(数据),
坐标=[],
_三角形的面积_=(w*h)/2;
函数d3Sum(i){
返回d3.sum(百分比值,函数(d,j){
如果(j>=i){
返回d;
}
});
}

对于(var i=0,len=data.length;i如果我理解正确,则不会为每个段呈现正确的区域。如果我们查看原始代码,有两种反向排序,
b-a
a-b
,都基于value属性。按百分比排序时,排序似乎与对数据进行排序时相反数据按值排序。通过删除所有排序,我们没有数据和百分比按相反顺序排序

因此,如果我们颠倒百分比的顺序,我们应该得到基准面与面积的正确对齐:

d3.pyramid=函数(){
变量大小=[1,1],
value=函数(d){返回d.value},
协调;
var percentageValues=函数(数据){
var值=data.map(值);
var sum=d3.sum(值,函数(d){
返回+d;
});
var percentValues=data.map(函数(d,i){
d、 值=+值[i];
返回值[i]/sum*100;
});
percentValues.reverse();
返回百分比值;
}
var坐标计算=功能(数据){
var w=大小[0],
h=尺寸[1],
比值=(w/2)/h,
PercentValue=PercentageValue(数据),
坐标=[],
_三角形的面积_=(w*h)/2;
函数d3Sum(i){
返回d3.sum(百分比值,函数(d,j){
如果(j>=i){
返回d;
}
});
}

对于(var i=0,len=data.length;i通过修改坐标的计算方式,您想做什么?您想做什么样的修改?另外,正确的输出是什么样子的?我想以相同的顺序呈现金字塔,例如顶部高,然后中间中,底部低,就像jsfiddle一样。但金字塔并不反映correct percentage sizeThanks@Andrew,通过颠倒百分比值修复了问题。@reactdev,没问题,如果我一开始对这个问题有点困惑,很抱歉。感谢你重新表述问题和回答。我接受了答案。@reactdev,我在编辑问题时总是有点谨慎-很高兴你能接受它(如果你不高兴,总是可以选择回滚编辑),谢谢你的接受。想知道如何在棱锥三角形之间添加填充。就像在d3.v3.5中一样,有d3.layout.pie().padAngle(.02)可以使切片稀疏。