Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
D3.js 无法将符号分配给幂双散点图数据点(类型为';符号<;{}>;';的参数不能分配给类型为';基元';的参数)_D3.js_Svg_Typescript_Powerbi - Fatal编程技术网

D3.js 无法将符号分配给幂双散点图数据点(类型为';符号<;{}>;';的参数不能分配给类型为';基元';的参数)

D3.js 无法将符号分配给幂双散点图数据点(类型为';符号<;{}>;';的参数不能分配给类型为';基元';的参数),d3.js,svg,typescript,powerbi,D3.js,Svg,Typescript,Powerbi,我试图用d3为幂双散射图中的数据点分配符号。我可以使用以下工具轻松制作所有十字架: .attr("d", d3.svg.symbol().type("cross")) 我认为我可以通过使用“if”语句来基于名为“component”的列中的值分配符号,以此为基础。有四个潜在的组件值:OA、OI、RA和CA。我试图使与组件OA相关的数据点使用十字,其余的是圆。以下是我所做的: .attr("d", function(d) { if (d.component ===

我试图用d3为幂双散射图中的数据点分配符号。我可以使用以下工具轻松制作所有十字架:

.attr("d", d3.svg.symbol().type("cross"))
我认为我可以通过使用“if”语句来基于名为“component”的列中的值分配符号,以此为基础。有四个潜在的组件值:OA、OI、RA和CA。我试图使与组件OA相关的数据点使用十字,其余的是圆。以下是我所做的:

.attr("d", function(d) {            
   if (d.component === "OA") { return d3.svg.symbol().type("cross") }  
   else { return d3.svg.symbol().type("circle") };   
 })
但我得到了以下错误

[ts]类型为“(d:ScatterChartDataPoint)=>Symbol”的参数不可分配给类型为“(数据:ScatterChartDataPoint,索引:编号,外部索引:编号)=>Primitive”的参数。类型“Symbol”不可分配给类型“Primitive”。类型“Symbol”不可分配给类型“false”


你知道怎么解决这个问题吗?我需要一个与D3V3.5.5兼容的解决方案。我不能使用d3 v4。

更改
attr
如下:

.attr("d", d3.svg.symbol().type((d:any)=> { 
           if (d.component === "OA") { return "cross";}
           else {return "circle";} 
        })    
)

您希望返回的是
d3.svg.symbol的类型,而不是
“d”
属性。因此您的回调位于错误的位置。

更改
attr
,如下所示:

.attr("d", d3.svg.symbol().type((d:any)=> { 
           if (d.component === "OA") { return "cross";}
           else {return "circle";} 
        })    
)

您希望返回的是
d3.svg.symbol的类型,而不是
“d”
属性。因此,您的回调位于错误的位置。

如果类型检查对您不重要;尝试
.attr(“d”,函数(d):任何{
谢谢@echonax。我按照您的建议尝试了,没有再收到错误,但我的图表中没有显示任何内容。它以前显示过什么吗?@echonax,当我使用.attr(“d”,d3.svg.symbol().type(“cross”))它为所有数据点分配十字。如果类型检查对您不重要,请尝试
.attr(“d”,函数(d):任何{
谢谢@echonax。我按照您的建议尝试了,但不再收到错误,但我的图表中没有显示任何内容。它是否显示了以前的内容?@echonax,当我使用.attr(“d”,d3.svg.symbol().type(“十字”)时)它将交叉分配给所有数据点。我尝试过,但出现了以下错误:“{}”类型上不存在属性“component”。@user7346922您的数据有该字段吗?当您控制台时,它记录了什么。log(d);在函数内部?是的:我看到13条包含组件的日志行。下面是一个示例:[对象对象]{band:“Eudora”,category:“1973”,颜色:“#FD625E”,组件:“OA”,POC:“Eudora Welty”,项目:“The Optimis…”,selectionId:Object{…},value:1}我让它工作了!我将d.component更改为(d,如有).component,它成功了!非常感谢您的帮助。我真的非常感谢。由@echonax提供的答案,包括
d:any
,解决了我的问题!我尝试过,但出现了以下错误:属性“component”在类型“{}”上不存在。@user7346922您的数据有那个字段吗?当您控制台.log(d)时,它会记录什么;函数内部?是的:我看到13行日志,其中包括组件。下面是一个示例:[object object]{band:“Eudora”,category:“1973”,color:“#FD625E”,component:“OA”,POC:“Eudora Welty”,project:“the Optimis…”,selectionId:object{…},value:1}我让它工作了!我将d.component改为(如有一样).component,它成功了!非常感谢您的帮助。我真的非常感谢。由@echonax提供的答案,包括
d:any
,解决了我的问题!