- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我正在尝试设计动态饼图,饼图的切片会根据随机生成的数据而变化。下面是代码。
var dataset = [
{ name: 'Smooth', percent: 40.00, class: 'custom-normal' },
{ name: 'Moderate', percent: 10.00, class: 'custom-warning' },
{ name: 'Heavy', percent: 50.00, class: 'custom-danger' }
];
var width = 960,
height = 500,
radius = Math.min(width, height) / 2; //Math.min return the smallest value between width and height (for optimization purposes)
var colorValues = d3.scaleOrdinal().domain(["Smooth", "Moderate", "Heavy"]).range(["#605A4C", "#ff9900", "#ff1a1a"]);
var percent = "percent"; //predefine the legend of dataset (the string index)
var category = "class";
var name = "name";
var pie = d3.pie()
.value(function(d) { return d[percent]; })
.sort(null)
.padAngle(.02); //the gap
var arc = d3.arc()
.innerRadius(radius - 100) //optimization
.outerRadius(radius - 20); //optimization
var svg = d3.select("#chart")
.append("svg")
.attrs({
width: width,
height: height,
class: "shadow"
}).append("g")
.attrs({
transform: 'translate(' + width / 2 + ',' + height / 2 + ')'
});
svg.append('g')
.attrs({
class: 'slices'
});
var path = svg.select('.slices')
.selectAll('path')
.data(pie(dataset))
.enter().append('path')
.attrs({
d: arc
}).each(function(d, i) {
this._current = d;
console.log(this._current);
console.log('okay!');
}).attrs({
class: function(d, i){
return d[category];
},
fill: function(d, i) {
console.log("this is color value" + colorValues());
return colorValues(d[i]);
}
}); //initial details (this._current)
var randomGenerator = setInterval(function() {
var data = dataset.map(function(d, i) {
for (var key in d) {
if (d[key] === "Smooth") {
//console.log("smooth");
dataset[0].percent = Math.floor(Math.random() * 100);
//console.log(dataset[0].percent);
} else if (d[key] === "Moderate") {
dataset[1].percent = Math.floor(Math.random() * 100);
//console.log(dataset[1].percent);
//console.log("moderate");
} else if (d[key] === "Heavy") {
dataset[2].percent = Math.floor(Math.random() * 100);
//console.log(dataset[2].percent);
//console.log("heavy");
}
}
});
}, 3000);
var timer = setInterval(function() {
pie.value(function(d) {
return d[percent];
}); // change the value function
path = path.data(pie(dataset)); // compute the new angles
path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
}, 3000);
// Store the displayed angles in _current.
// Then, interpolate from _current to the new angles.
// During the transition, _current is updated in-place by d3.interpolate.
function arcTween(a) {
var i = d3.interpolate(this._current, a);
console.log(this._current);
this._current = i(0);
return function(t) {
return arc(i(t));
};
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: auto;
position: relative;
width: 960px;
}
<meta charset="utf-8">
<div id="mydiv" class="widget">
<div id="chart" class="Chart chart-container"></div>
</div>
<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>
请注意,每个切片的颜色并未根据我之前定义的进行缩放。即:var colorValues = d3.scaleOrdinal().domain(["Smooth", "Moderate", "Heavy"]).range(["#605A4C", "#ff9900", "#ff1a1a"]) ;
。我认为这应该是选择问题,但是我对此一无所知。然而,类也是如此,它只获取 var dataset
中的第一行数据并应用于所有数据。
最佳答案
如果我没理解错的话,
通过 pie 函数推送您的数据,您正在更改您的数据。虽然您的初始结构是:
{ name: 'Smooth', percent: 40.00, class: 'custom-normal' }
通过 pie 函数运行此数据后,绑定(bind)到每个圆弧的数据具有以下结构:
{
"data": {
"name": "Heavy",
"percent": 48,
"class": "custom-danger"
},
"index": 2,
"value": 50,
"startAngle": 3.1515926535897933,
"endAngle": 6.283185307179586,
"padAngle": 0.02
}
在您的代码中,您基于此为楔形着色:
fill: function(d, i) {
console.log("this is color value" + colorValues());
return colorValues(d[i]);
}
function(d){}
中的d
指的是数据,因此它只是输入数据中的单个项目(绑定(bind)到特定弧的数据),这是一个对象 - d[number] 的使用表明您预期一个数组。无论如何,每次运行此函数时,您都会得到 undefined
。
而是访问所需数据的属性:name
(我假设)并使用:
fill: function(d, i) {
console.log("this is color value" + colorValues());
return colorValues(d.data.name);
}
var dataset = [
{ name: 'Smooth', percent: 40.00, class: 'custom-normal' },
{ name: 'Moderate', percent: 10.00, class: 'custom-warning' },
{ name: 'Heavy', percent: 50.00, class: 'custom-danger' }
];
var width = 960,
height = 500,
radius = Math.min(width, height) / 2; //Math.min return the smallest value between width and height (for optimization purposes)
var colorValues = d3.scaleOrdinal().domain(["Smooth", "Moderate", "Heavy"]).range(["#605A4C", "#ff9900", "#ff1a1a"]);
var percent = "percent"; //predefine the legend of dataset (the string index)
var category = "class";
var name = "name";
var pie = d3.pie()
.value(function(d) { return d[percent]; })
.sort(null)
.padAngle(.02); //the gap
var arc = d3.arc()
.innerRadius(radius - 100) //optimization
.outerRadius(radius - 20); //optimization
var svg = d3.select("#chart")
.append("svg")
.attrs({
width: width,
height: height,
class: "shadow"
}).append("g")
.attrs({
transform: 'translate(' + width / 2 + ',' + height / 2 + ')'
});
svg.append('g')
.attrs({
class: 'slices'
});
var path = svg.select('.slices')
.selectAll('path')
.data(pie(dataset))
.enter().append('path')
.attrs({
d: arc
}).each(function(d, i) {
this._current = d;
console.log(this._current);
console.log('okay!');
}).attrs({
class: function(d, i){
return d.data.class;
},
fill: function(d, i) {
console.log("this is color value" + colorValues());
return colorValues(d.data.name);
}
}); //initial details (this._current)
var randomGenerator = setInterval(function() {
var data = dataset.map(function(d, i) {
for (var key in d) {
if (d[key] === "Smooth") {
//console.log("smooth");
dataset[0].percent = Math.floor(Math.random() * 100);
//console.log(dataset[0].percent);
} else if (d[key] === "Moderate") {
dataset[1].percent = Math.floor(Math.random() * 100);
//console.log(dataset[1].percent);
//console.log("moderate");
} else if (d[key] === "Heavy") {
dataset[2].percent = Math.floor(Math.random() * 100);
//console.log(dataset[2].percent);
//console.log("heavy");
}
}
});
}, 3000);
var timer = setInterval(function() {
pie.value(function(d) {
return d[percent];
}); // change the value function
path = path.data(pie(dataset)); // compute the new angles
path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
}, 3000);
// Store the displayed angles in _current.
// Then, interpolate from _current to the new angles.
// During the transition, _current is updated in-place by d3.interpolate.
function arcTween(a) {
var i = d3.interpolate(this._current, a);
console.log(this._current);
this._current = i(0);
return function(t) {
return arc(i(t));
};
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: auto;
position: relative;
width: 960px;
}
<meta charset="utf-8">
<div id="mydiv" class="widget">
<div id="chart" class="Chart chart-container"></div>
</div>
<script src="https://d3js.org/d3.v4.js"></script>
<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>
关于javascript - D3饼图中的每个选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47824901/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!