破解带有“零”数据的 d3 饼图

d3w*_*abe 2 javascript d3.js

我想显示一个即使没有数据也可见的 d3 饼图(类似于这个问题:是否可以启动所有值都为 0 的 D3JS 饼图?) - 例如,显示的饼图用户个人资料中提出的问题与回答的问题总数 - 当用户刚刚注册时,您仍然希望看到饼图(可能以单一颜色显示为灰色)。

我想要实现的解决方案是在创建饼图期间检查数据是否有 2 行(一行表示正确计数,一行表示错误计数)仅由零组成,如果是这样,我只需更改一将这些数字归为 1 以便绘制图表,然后进行干预以确保没有文字显示“1 正确”之类的内容。

所以我的问题是,是否有人能找到一种合理的方法来在饼图创建过程中更改以下代码,以仅当两行均为 0 时才将其中一个饼图值从 0 更改为 1...

var pie = d3.layout.pie().sort(null).value(function(d) { return d.someCount; });
Run Code Online (Sandbox Code Playgroud)

我已经尝试了多种循环数据的解决方案(例如使用 .each() 函数)来获取 d.someCount 所有值的总和,但到目前为止它们还没有达到预期的效果,所以我怀疑我我没有正确地看待问题。

- 编辑 -

根据请求的示例 - 尝试将两个值(Javascript 中的顶行)更改为零,并且图表消失(可以理解,基于我链接到的其他 SO 帖子的反馈)...

http://codepen.io/d3wannabe/pen/oZbWEv

anb*_*nyc 7

您可以添加一个额外的占位符类别 ,"empty"其计数是根据其他两个类别动态设置的。您可以给它自己的颜色以将其与其他两个区分开来。这能实现你的目标吗?

var pieChartData = [ { "type": "asked", "theCount": "0" }
                   , { "type": "answered", "theCount": "0" }
                   , { "type": "empty", "theCount": "0"}];

if(pieChartData[0].theCount === "0" &&
  pieChartData[1].theCount === "0"){
  pieChartData[2].theCount = "1"
} else {
  pieChartData[2].theCount = "0"
}
Run Code Online (Sandbox Code Playgroud)